예제 #1
1
파일: Datelist.php 프로젝트: nsp15/Drupal8
 /**
  * {@inheritdoc}
  *
  * Validates the date type to adjust 12 hour time and prevent invalid dates.
  * If the date is valid, the date is set in the form.
  */
 public static function valueCallback(&$element, $input, FormStateInterface $form_state)
 {
     $parts = $element['#date_part_order'];
     $increment = $element['#date_increment'];
     $date = NULL;
     if ($input !== FALSE) {
         $return = $input;
         if (isset($input['ampm'])) {
             if ($input['ampm'] == 'pm' && $input['hour'] < 12) {
                 $input['hour'] += 12;
             } elseif ($input['ampm'] == 'am' && $input['hour'] == 12) {
                 $input['hour'] -= 12;
             }
             unset($input['ampm']);
         }
         $timezone = !empty($element['#date_timezone']) ? $element['#date_timezone'] : NULL;
         $date = DrupalDateTime::createFromArray($input, $timezone);
         if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
             static::incrementRound($date, $increment);
         }
     } else {
         $return = array_fill_keys($parts, '');
         if (!empty($element['#default_value'])) {
             $date = $element['#default_value'];
             if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
                 static::incrementRound($date, $increment);
                 foreach ($parts as $part) {
                     switch ($part) {
                         case 'day':
                             $format = 'j';
                             break;
                         case 'month':
                             $format = 'n';
                             break;
                         case 'year':
                             $format = 'Y';
                             break;
                         case 'hour':
                             $format = in_array('ampm', $element['#date_part_order']) ? 'g' : 'G';
                             break;
                         case 'minute':
                             $format = 'i';
                             break;
                         case 'second':
                             $format = 's';
                             break;
                         case 'ampm':
                             $format = 'a';
                             break;
                         default:
                             $format = '';
                     }
                     $return[$part] = $date->format($format);
                 }
             }
         }
     }
     $return['object'] = $date;
     return $return;
 }
예제 #2
1
 /**
  * {@inheritdoc}
  */
 public function getDateTime()
 {
     if ($this->value) {
         if (is_array($this->value)) {
             $datetime = DrupalDateTime::createFromArray($this->value);
         } else {
             $datetime = new DrupalDateTime($this->value);
         }
         return $datetime;
     }
 }