diff options
Diffstat (limited to 'app/Functions/FunctionsDate.php')
| -rw-r--r-- | app/Functions/FunctionsDate.php | 204 |
1 files changed, 104 insertions, 100 deletions
diff --git a/app/Functions/FunctionsDate.php b/app/Functions/FunctionsDate.php index e46804a4fb..f317cf0f74 100644 --- a/app/Functions/FunctionsDate.php +++ b/app/Functions/FunctionsDate.php @@ -21,107 +21,111 @@ use Fisharebest\Webtrees\I18N; /** * Class FunctionsDate - common functions */ -class FunctionsDate { - /** - * Convert a GEDCOM age string to localized text. - * - * @param string $age_string - * - * @return string - */ - public static function getAgeAtEvent($age_string) { - switch (strtoupper($age_string)) { - case 'CHILD': - return I18N::translate('Child'); - case 'INFANT': - return I18N::translate('Infant'); - case 'STILLBORN': - return I18N::translate('Stillborn'); - default: - return preg_replace_callback( - [ - '/(\d+)([ymwd])/', - ], - function ($match) { - switch ($match[2]) { - case 'y': - return I18N::plural('%s year', '%s years', $match[1], I18N::digits($match[1])); - case 'm': - return I18N::plural('%s month', '%s months', $match[1], I18N::digits($match[1])); - case 'w': - return I18N::plural('%s week', '%s weeks', $match[1], I18N::digits($match[1])); - case 'd': - return I18N::plural('%s day', '%s days', $match[1], I18N::digits($match[1])); - } - }, - $age_string - ); - } - } +class FunctionsDate +{ + /** + * Convert a GEDCOM age string to localized text. + * + * @param string $age_string + * + * @return string + */ + public static function getAgeAtEvent($age_string) + { + switch (strtoupper($age_string)) { + case 'CHILD': + return I18N::translate('Child'); + case 'INFANT': + return I18N::translate('Infant'); + case 'STILLBORN': + return I18N::translate('Stillborn'); + default: + return preg_replace_callback( + [ + '/(\d+)([ymwd])/', + ], + function ($match) { + switch ($match[2]) { + case 'y': + return I18N::plural('%s year', '%s years', $match[1], I18N::digits($match[1])); + case 'm': + return I18N::plural('%s month', '%s months', $match[1], I18N::digits($match[1])); + case 'w': + return I18N::plural('%s week', '%s weeks', $match[1], I18N::digits($match[1])); + case 'd': + return I18N::plural('%s day', '%s days', $match[1], I18N::digits($match[1])); + } + }, + $age_string + ); + } + } - /** - * Convert a unix timestamp into a formatted date-time value, for logs, etc. - * Don't attempt to convert into other calendars, as not all days start at - * midnight, and we can only get it wrong. - * - * @param int $time - * - * @return string - */ - public static function formatTimestamp($time) { - $time_fmt = I18N::timeFormat(); - // PHP::date() doesn't do I18N. Do it ourselves.... - preg_match_all('/%[^%]/', $time_fmt, $matches); - foreach ($matches[0] as $match) { - switch ($match) { - case '%a': - $t = gmdate('His', $time); - if ($t == '000000') { - $time_fmt = str_replace($match, /* I18N: time format “%a” - exactly 00:00:00 */ - I18N::translate('midnight'), $time_fmt); - } elseif ($t < '120000') { - $time_fmt = str_replace($match, /* I18N: time format “%a” - between 00:00:01 and 11:59:59 */ - I18N::translate('a.m.'), $time_fmt); - } elseif ($t == '120000') { - $time_fmt = str_replace($match, /* I18N: time format “%a” - exactly 12:00:00 */ - I18N::translate('noon'), $time_fmt); - } else { - $time_fmt = str_replace($match, /* I18N: time format “%a” - between 12:00:01 and 23:59:59 */ - I18N::translate('p.m.'), $time_fmt); - } - break; - case '%A': - $t = gmdate('His', $time); - if ($t == '000000') { - $time_fmt = str_replace($match, /* I18N: time format “%A” - exactly 00:00:00 */ - I18N::translate('Midnight'), $time_fmt); - } elseif ($t < '120000') { - $time_fmt = str_replace($match, /* I18N: time format “%A” - between 00:00:01 and 11:59:59 */ - I18N::translate('A.M.'), $time_fmt); - } elseif ($t == '120000') { - $time_fmt = str_replace($match, /* I18N: time format “%A” - exactly 12:00:00 */ - I18N::translate('Noon'), $time_fmt); - } else { - $time_fmt = str_replace($match, /* I18N: time format “%A” - between 12:00:01 and 23:59:59 */ - I18N::translate('P.M.'), $time_fmt); - } - break; - default: - $time_fmt = str_replace($match, I18N::digits(gmdate(substr($match, -1), $time)), $time_fmt); - } - } + /** + * Convert a unix timestamp into a formatted date-time value, for logs, etc. + * Don't attempt to convert into other calendars, as not all days start at + * midnight, and we can only get it wrong. + * + * @param int $time + * + * @return string + */ + public static function formatTimestamp($time) + { + $time_fmt = I18N::timeFormat(); + // PHP::date() doesn't do I18N. Do it ourselves.... + preg_match_all('/%[^%]/', $time_fmt, $matches); + foreach ($matches[0] as $match) { + switch ($match) { + case '%a': + $t = gmdate('His', $time); + if ($t == '000000') { + $time_fmt = str_replace($match, /* I18N: time format “%a” - exactly 00:00:00 */ + I18N::translate('midnight'), $time_fmt); + } elseif ($t < '120000') { + $time_fmt = str_replace($match, /* I18N: time format “%a” - between 00:00:01 and 11:59:59 */ + I18N::translate('a.m.'), $time_fmt); + } elseif ($t == '120000') { + $time_fmt = str_replace($match, /* I18N: time format “%a” - exactly 12:00:00 */ + I18N::translate('noon'), $time_fmt); + } else { + $time_fmt = str_replace($match, /* I18N: time format “%a” - between 12:00:01 and 23:59:59 */ + I18N::translate('p.m.'), $time_fmt); + } + break; + case '%A': + $t = gmdate('His', $time); + if ($t == '000000') { + $time_fmt = str_replace($match, /* I18N: time format “%A” - exactly 00:00:00 */ + I18N::translate('Midnight'), $time_fmt); + } elseif ($t < '120000') { + $time_fmt = str_replace($match, /* I18N: time format “%A” - between 00:00:01 and 11:59:59 */ + I18N::translate('A.M.'), $time_fmt); + } elseif ($t == '120000') { + $time_fmt = str_replace($match, /* I18N: time format “%A” - exactly 12:00:00 */ + I18N::translate('Noon'), $time_fmt); + } else { + $time_fmt = str_replace($match, /* I18N: time format “%A” - between 12:00:01 and 23:59:59 */ + I18N::translate('P.M.'), $time_fmt); + } + break; + default: + $time_fmt = str_replace($match, I18N::digits(gmdate(substr($match, -1), $time)), $time_fmt); + } + } - return self::timestampToGedcomDate($time)->display() . '<span class="date"> - ' . $time_fmt . '</span>'; - } + return self::timestampToGedcomDate($time)->display() . '<span class="date"> - ' . $time_fmt . '</span>'; + } - /** - * Convert a unix-style timestamp into a Date object - * - * @param int $time - * - * @return Date - */ - public static function timestampToGedcomDate($time) { - return new Date(strtoupper(gmdate('j M Y', $time))); - } + /** + * Convert a unix-style timestamp into a Date object + * + * @param int $time + * + * @return Date + */ + public static function timestampToGedcomDate($time) + { + return new Date(strtoupper(gmdate('j M Y', $time))); + } } |
