Esempio n. 1
0
 protected static function _set_date_value(Date $date, $value)
 {
     if (!$value) {
         $date->set_unix_time(time());
     } else {
         if (is_object($value) && ClassHelper::is_instance_of($value, 'DateTime')) {
             $date->set_unix_time($value->getTimestamp());
         } else {
             if (is_object($value) && ClassHelper::is_instance_of($value, 'Date')) {
                 $date->set_year($value->_year, false);
                 $date->set_month($value->_month, false);
                 $date->set_day($value->_day, false);
                 $date->set_hour($value->_hour, false);
                 $date->set_minutes($value->_min, false);
                 $date->set_seconds($value->_secs, false);
             } else {
                 $value = trim($value);
                 if (is_array($value)) {
                     if (array_keys($value, 'year')) {
                         $date->set_year($value['year'], false);
                     }
                     if (array_keys($value, 'month')) {
                         $date->set_month($value['month'], false);
                     }
                     if (array_keys($value, 'day')) {
                         $date->set_day($value['day'], false);
                     }
                     if (array_keys($value, 'hour')) {
                         $date->set_hour($value['hour'], false);
                     }
                     if (array_keys($value, 'minutes')) {
                         $date->set_minutes($value['minutes'], false);
                     }
                     if (array_keys($value, 'seconds')) {
                         $date->set_seconds($value['seconds'], false);
                     }
                 } else {
                     if (preg_match('#^\\d{4}$#', $value)) {
                         $date->set_year($value, false);
                     } else {
                         if (preg_match('#^\\d{5,}$#', $value)) {
                             $date->set_unix_time($value);
                         } else {
                             if (preg_match(self::$_sql_pattern, $value, $match)) {
                                 $date->set_year($match['year'], false);
                                 $date->set_month($match['month'], false);
                                 $date->set_day($match['day'], false);
                                 if (isset($match['hour'])) {
                                     $date->set_hour($match['hour'], false);
                                     $date->set_minutes($match['minutes'], false);
                                     if (isset($match['seconds'])) {
                                         $date->set_seconds($match['seconds'], false);
                                     }
                                 }
                             } else {
                                 if (preg_match(self::_format_to_pattern(self::get_default_format_datetime_secs()), $value, $match)) {
                                     $date->set_year($match['year'], false);
                                     $date->set_month($match['month'], false);
                                     $date->set_day($match['day'], false);
                                     $date->set_hour($match['hour'], false);
                                     $date->set_minutes($match['minutes'], false);
                                     $date->set_seconds($match['seconds'], false);
                                 } else {
                                     if (preg_match(self::_format_to_pattern(self::get_default_format_datetime()), $value, $match)) {
                                         $date->set_year($match['year'], false);
                                         $date->set_month($match['month'], false);
                                         $date->set_day($match['day'], false);
                                         $date->set_hour($match['hour'], false);
                                         $date->set_minutes($match['minutes'], false);
                                     } else {
                                         if (preg_match(self::_format_to_pattern(self::get_default_format_date()), $value, $match)) {
                                             $date->set_year($match['year'], false);
                                             $date->set_month($match['month'], false);
                                             $date->set_day($match['day'], false);
                                         } else {
                                             $no_spaces_value = str_replace(' ', '', $value);
                                             if ($no_spaces_value != $value) {
                                                 return self::_set_date_value($date, $no_spaces_value);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $date->validate();
 }