Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
5.00% |
1 / 20 |
CRAP | |
6.16% |
9 / 146 |
| DateHelper | |
0.00% |
0 / 1 |
|
5.00% |
1 / 20 |
2935.12 | |
6.16% |
9 / 146 |
| monthNamesUntranslated | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| monthNamesAbbrUntranslated | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| monthNames | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 14 |
|||
| monthNamesAbbr | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 14 |
|||
| weekDaysUntranslated | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| weekDays | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| weekDaysAbbr | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| weekDaysAbbr2 | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| weekDaysAbbr1 | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| weekDaysOrdered | |
100.00% |
1 / 1 |
3 | |
100.00% |
9 / 9 |
|||
| years | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 8 |
|||
| days | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 9 |
|||
| hours | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 11 |
|||
| minutes | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 8 |
|||
| seconds | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 8 |
|||
| ampm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| daysInMonth | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| daysInYear | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 7 |
|||
| dayOfWeek | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| dayOfWeekName | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Datetime\DateHelper. | |
| * | |
| * Lots of helpful functions for use in massaging dates, specific to the | |
| * Gregorian calendar system. The values include both translated and | |
| * untranslated values. | |
| * | |
| * Untranslated values are useful as array keys and as css identifiers, and | |
| * should be listed in English. | |
| * | |
| * Translated values are useful for display to the user. All values that need | |
| * translation should be hard-coded and wrapped in t() so the translation system | |
| * will be able to process them. | |
| */ | |
| namespace Drupal\Core\Datetime; | |
| /** | |
| * Defines Gregorian Calendar date values. | |
| */ | |
| class DateHelper { | |
| /** | |
| * Constructs an untranslated array of month names. | |
| * | |
| * @return array | |
| * An array of month names. | |
| */ | |
| public static function monthNamesUntranslated() { | |
| // Force the key to use the correct month value, rather than | |
| // starting with zero. | |
| return array( | |
| 1 => 'January', | |
| 2 => 'February', | |
| 3 => 'March', | |
| 4 => 'April', | |
| 5 => 'May', | |
| 6 => 'June', | |
| 7 => 'July', | |
| 8 => 'August', | |
| 9 => 'September', | |
| 10 => 'October', | |
| 11 => 'November', | |
| 12 => 'December', | |
| ); | |
| } | |
| /** | |
| * Constructs an untranslated array of abbreviated month names. | |
| * | |
| * @return array | |
| * An array of month names. | |
| */ | |
| public static function monthNamesAbbrUntranslated() { | |
| // Force the key to use the correct month value, rather than | |
| // starting with zero. | |
| return array( | |
| 1 => 'Jan', | |
| 2 => 'Feb', | |
| 3 => 'Mar', | |
| 4 => 'Apr', | |
| 5 => 'May', | |
| 6 => 'Jun', | |
| 7 => 'Jul', | |
| 8 => 'Aug', | |
| 9 => 'Sep', | |
| 10 => 'Oct', | |
| 11 => 'Nov', | |
| 12 => 'Dec', | |
| ); | |
| } | |
| /** | |
| * Returns a translated array of month names. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of month names. | |
| */ | |
| public static function monthNames($required = FALSE) { | |
| // Force the key to use the correct month value, rather than | |
| // starting with zero. | |
| $monthnames = array( | |
| 1 => t('January', array(), array('context' => 'Long month name')), | |
| 2 => t('February', array(), array('context' => 'Long month name')), | |
| 3 => t('March', array(), array('context' => 'Long month name')), | |
| 4 => t('April', array(), array('context' => 'Long month name')), | |
| 5 => t('May', array(), array('context' => 'Long month name')), | |
| 6 => t('June', array(), array('context' => 'Long month name')), | |
| 7 => t('July', array(), array('context' => 'Long month name')), | |
| 8 => t('August', array(), array('context' => 'Long month name')), | |
| 9 => t('September', array(), array('context' => 'Long month name')), | |
| 10 => t('October', array(), array('context' => 'Long month name')), | |
| 11 => t('November', array(), array('context' => 'Long month name')), | |
| 12 => t('December', array(), array('context' => 'Long month name')), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $monthnames : $monthnames; | |
| } | |
| /** | |
| * Constructs a translated array of month name abbreviations | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of month abbreviations. | |
| */ | |
| public static function monthNamesAbbr($required = FALSE) { | |
| // Force the key to use the correct month value, rather than | |
| // starting with zero. | |
| $monthnames = array( | |
| 1 => t('Jan', array(), array('context' => 'Abbreviated month name')), | |
| 2 => t('Feb', array(), array('context' => 'Abbreviated month name')), | |
| 3 => t('Mar', array(), array('context' => 'Abbreviated month name')), | |
| 4 => t('Apr', array(), array('context' => 'Abbreviated month name')), | |
| 5 => t('May', array(), array('context' => 'Abbreviated month name')), | |
| 6 => t('Jun', array(), array('context' => 'Abbreviated month name')), | |
| 7 => t('Jul', array(), array('context' => 'Abbreviated month name')), | |
| 8 => t('Aug', array(), array('context' => 'Abbreviated month name')), | |
| 9 => t('Sep', array(), array('context' => 'Abbreviated month name')), | |
| 10 => t('Oct', array(), array('context' => 'Abbreviated month name')), | |
| 11 => t('Nov', array(), array('context' => 'Abbreviated month name')), | |
| 12 => t('Dec', array(), array('context' => 'Abbreviated month name')), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $monthnames : $monthnames; | |
| } | |
| /** | |
| * Constructs an untranslated array of week days. | |
| * | |
| * @return array | |
| * An array of week day names | |
| */ | |
| public static function weekDaysUntranslated() { | |
| return array( | |
| 'Sunday', | |
| 'Monday', | |
| 'Tuesday', | |
| 'Wednesday', | |
| 'Thursday', | |
| 'Friday', | |
| 'Saturday', | |
| ); | |
| } | |
| /** | |
| * Returns a translated array of week names. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of week day names | |
| */ | |
| public static function weekDays($required = FALSE) { | |
| $weekdays = array( | |
| t('Sunday'), | |
| t('Monday'), | |
| t('Tuesday'), | |
| t('Wednesday'), | |
| t('Thursday'), | |
| t('Friday'), | |
| t('Saturday'), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $weekdays : $weekdays; | |
| } | |
| /** | |
| * Constructs a translated array of week day abbreviations. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of week day abbreviations | |
| */ | |
| public static function weekDaysAbbr($required = FALSE) { | |
| $weekdays = array( | |
| t('Sun', array(), array('context' => 'Abbreviated weekday')), | |
| t('Mon', array(), array('context' => 'Abbreviated weekday')), | |
| t('Tue', array(), array('context' => 'Abbreviated weekday')), | |
| t('Wed', array(), array('context' => 'Abbreviated weekday')), | |
| t('Thu', array(), array('context' => 'Abbreviated weekday')), | |
| t('Fri', array(), array('context' => 'Abbreviated weekday')), | |
| t('Sat', array(), array('context' => 'Abbreviated weekday')), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $weekdays : $weekdays; | |
| } | |
| /** | |
| * Constructs a translated array of 2-letter week day abbreviations. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of week day 2 letter abbreviations | |
| */ | |
| public static function weekDaysAbbr2($required = FALSE) { | |
| $weekdays = array( | |
| t('Su', array(), array('context' => 'Abbreviated weekday')), | |
| t('Mo', array(), array('context' => 'Abbreviated weekday')), | |
| t('Tu', array(), array('context' => 'Abbreviated weekday')), | |
| t('We', array(), array('context' => 'Abbreviated weekday')), | |
| t('Th', array(), array('context' => 'Abbreviated weekday')), | |
| t('Fr', array(), array('context' => 'Abbreviated weekday')), | |
| t('Sa', array(), array('context' => 'Abbreviated weekday')), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $weekdays : $weekdays; | |
| } | |
| /** | |
| * Constructs a translated array of 1-letter week day abbreviations. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of week day 1 letter abbreviations | |
| */ | |
| public static function weekDaysAbbr1($required = FALSE) { | |
| $weekdays = array( | |
| t('S', array(), array('context' => 'Abbreviated 1 letter weekday Sunday')), | |
| t('M', array(), array('context' => 'Abbreviated 1 letter weekday Monday')), | |
| t('T', array(), array('context' => 'Abbreviated 1 letter weekday Tuesday')), | |
| t('W', array(), array('context' => 'Abbreviated 1 letter weekday Wednesday')), | |
| t('T', array(), array('context' => 'Abbreviated 1 letter weekday Thursday')), | |
| t('F', array(), array('context' => 'Abbreviated 1 letter weekday Friday')), | |
| t('S', array(), array('context' => 'Abbreviated 1 letter weekday Saturday')), | |
| ); | |
| $none = array('' => ''); | |
| return !$required ? $none + $weekdays : $weekdays; | |
| } | |
| /** | |
| * Reorders weekdays to match the first day of the week. | |
| * | |
| * @param array $weekdays | |
| * An array of weekdays. | |
| * | |
| * @return array | |
| * An array of weekdays reordered to match the first day of the week. The | |
| * keys will remain unchanged. For example, if the first day of the week is | |
| * set to be Monday, the array keys will be [1, 2, 3, 4, 5, 6, 0]. | |
| */ | |
| public static function weekDaysOrdered($weekdays) { | |
| $first_day = \Drupal::config('system.date')->get('first_day'); | |
| if ($first_day > 0) { | |
| for ($i = 1; $i <= $first_day; $i++) { | |
| // Reset the array to the first element. | |
| reset($weekdays); | |
| // Retrieve the first week day value. | |
| $last = current($weekdays); | |
| // Store the corresponding key. | |
| $key = key($weekdays); | |
| // Remove this week day from the beginning of the array. | |
| unset($weekdays[$key]); | |
| // Add this week day to the end of the array. | |
| $weekdays[$key] = $last; | |
| } | |
| } | |
| return $weekdays; | |
| } | |
| /** | |
| * Constructs an array of years in a specified range. | |
| * | |
| * @param int $min | |
| * (optional) The minimum year in the array. Defaults to zero. | |
| * @param int $max | |
| * (optional) The maximum year in the array. Defaults to zero. | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of years in the selected range. | |
| */ | |
| public static function years($min = 0, $max = 0, $required = FALSE) { | |
| // Ensure $min and $max are valid values. | |
| if (empty($min)) { | |
| $min = intval(date('Y', REQUEST_TIME) - 3); | |
| } | |
| if (empty($max)) { | |
| $max = intval(date('Y', REQUEST_TIME) + 3); | |
| } | |
| $none = array('' => ''); | |
| $range = range($min, $max); | |
| $range = array_combine($range, $range); | |
| return !$required ? $none + $range : $range; | |
| } | |
| /** | |
| * Constructs an array of days in a month. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * @param int $month | |
| * (optional) The month in which to find the number of days. Defaults to | |
| * NULL. | |
| * @param int $year | |
| * (optional) The year in which to find the number of days. Defaults to | |
| * NULL. | |
| * | |
| * @return array | |
| * An array of days for the selected month. | |
| */ | |
| public static function days($required = FALSE, $month = NULL, $year = NULL) { | |
| // If we have a month and year, find the right last day of the month. | |
| if (!empty($month) && !empty($year)) { | |
| $date = new DrupalDateTime($year . '-' . $month . '-01 00:00:00', 'UTC'); | |
| $max = $date->format('t'); | |
| } | |
| // If there is no month and year given, default to 31. | |
| if (empty($max)) { | |
| $max = 31; | |
| } | |
| $none = array('' => ''); | |
| $range = range(1, $max); | |
| $range = array_combine($range, $range); | |
| return !$required ? $none + $range : $range; | |
| } | |
| /** | |
| * Constructs an array of hours. | |
| * | |
| * @param string $format | |
| * (optional) A date format string that indicates the format to use for the | |
| * hours. Defaults to 'H'. | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of hours in the selected format. | |
| */ | |
| public static function hours($format = 'H', $required = FALSE) { | |
| $hours = array(); | |
| if ($format == 'h' || $format == 'g') { | |
| $min = 1; | |
| $max = 12; | |
| } | |
| else { | |
| $min = 0; | |
| $max = 23; | |
| } | |
| for ($i = $min; $i <= $max; $i++) { | |
| $formatted = ($format == 'H' || $format == 'h') ? DrupalDateTime::datePad($i) : $i; | |
| $hours[$i] = $formatted; | |
| } | |
| $none = array('' => ''); | |
| return !$required ? $none + $hours : $hours; | |
| } | |
| /** | |
| * Constructs an array of minutes. | |
| * | |
| * @param string $format | |
| * (optional) A date format string that indicates the format to use for the | |
| * minutes. Defaults to 'i'. | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * @param int $increment | |
| * An integer value to increment the values. Defaults to 1. | |
| * | |
| * @return array | |
| * An array of minutes in the selected format. | |
| */ | |
| public static function minutes($format = 'i', $required = FALSE, $increment = 1) { | |
| $minutes = array(); | |
| // Ensure $increment has a value so we don't loop endlessly. | |
| if (empty($increment)) { | |
| $increment = 1; | |
| } | |
| for ($i = 0; $i < 60; $i += $increment) { | |
| $formatted = $format == 'i' ? DrupalDateTime::datePad($i) : $i; | |
| $minutes[$i] = $formatted; | |
| } | |
| $none = array('' => ''); | |
| return !$required ? $none + $minutes : $minutes; | |
| } | |
| /** | |
| * Constructs an array of seconds. | |
| * | |
| * @param string $format | |
| * (optional) A date format string that indicates the format to use for the | |
| * seconds. Defaults to 's'. | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * @param int $increment | |
| * An integer value to increment the values. Defaults to 1. | |
| * | |
| * @return array | |
| * An array of seconds in the selected format. | |
| */ | |
| public static function seconds($format = 's', $required = FALSE, $increment = 1) { | |
| $seconds = array(); | |
| // Ensure $increment has a value so we don't loop endlessly. | |
| if (empty($increment)) { | |
| $increment = 1; | |
| } | |
| for ($i = 0; $i < 60; $i += $increment) { | |
| $formatted = $format == 's' ? DrupalDateTime::datePad($i) : $i; | |
| $seconds[$i] = $formatted; | |
| } | |
| $none = array('' => ''); | |
| return !$required ? $none + $seconds : $seconds; | |
| } | |
| /** | |
| * Constructs an array of AM and PM options. | |
| * | |
| * @param bool $required | |
| * (optional) If FALSE, the returned array will include a blank value. | |
| * Defaults to FALSE. | |
| * | |
| * @return array | |
| * An array of AM and PM options. | |
| */ | |
| public static function ampm($required = FALSE) { | |
| $none = array('' => ''); | |
| $ampm = array( | |
| 'am' => t('am', array(), array('context' => 'ampm')), | |
| 'pm' => t('pm', array(), array('context' => 'ampm')), | |
| ); | |
| return !$required ? $none + $ampm : $ampm; | |
| } | |
| /** | |
| * Identifies the number of days in a month for a date. | |
| * | |
| * @param mixed $date | |
| * (optional) A DrupalDateTime object or a date string. | |
| * Defaults to NULL, which means to use the current date. | |
| * | |
| * @return int | |
| * The number of days in the month. | |
| */ | |
| public static function daysInMonth($date = NULL) { | |
| if (!$date instanceof DrupalDateTime) { | |
| $date = new DrupalDateTime($date); | |
| } | |
| if (!$date->hasErrors()) { | |
| return $date->format('t'); | |
| } | |
| return NULL; | |
| } | |
| /** | |
| * Identifies the number of days in a year for a date. | |
| * | |
| * @param mixed $date | |
| * (optional) A DrupalDateTime object or a date string. | |
| * Defaults to NULL, which means to use the current date. | |
| * | |
| * @return int | |
| * The number of days in the year. | |
| */ | |
| public static function daysInYear($date = NULL) { | |
| if (!$date instanceof DrupalDateTime) { | |
| $date = new DrupalDateTime($date); | |
| } | |
| if (!$date->hasErrors()) { | |
| if ($date->format('L')) { | |
| return 366; | |
| } | |
| else { | |
| return 365; | |
| } | |
| } | |
| return NULL; | |
| } | |
| /** | |
| * Returns day of week for a given date (0 = Sunday). | |
| * | |
| * @param mixed $date | |
| * (optional) A DrupalDateTime object or a date string. | |
| * Defaults to NULL, which means use the current date. | |
| * | |
| * @return int | |
| * The number of the day in the week. | |
| */ | |
| public static function dayOfWeek($date = NULL) { | |
| if (!$date instanceof DrupalDateTime) { | |
| $date = new DrupalDateTime($date); | |
| } | |
| if (!$date->hasErrors()) { | |
| return $date->format('w'); | |
| } | |
| return NULL; | |
| } | |
| /** | |
| * Returns translated name of the day of week for a given date. | |
| * | |
| * @param mixed $date | |
| * (optional) A DrupalDateTime object or a date string. | |
| * Defaults to NULL, which means use the current date. | |
| * @param string $abbr | |
| * (optional) Whether to return the abbreviated name for that day. | |
| * Defaults to TRUE. | |
| * | |
| * @return string | |
| * The name of the day in the week for that date. | |
| */ | |
| public static function dayOfWeekName($date = NULL, $abbr = TRUE) { | |
| if (!$date instanceof DrupalDateTime) { | |
| $date = new DrupalDateTime($date); | |
| } | |
| $dow = self::dayOfWeek($date); | |
| $days = $abbr ? self::weekDaysAbbr() : self::weekDays(); | |
| return $days[$dow]; | |
| } | |
| } | |