|
|
@@ -6,7 +6,7 @@ use Cake\Chronos\Date;
|
|
|
use Cake\Chronos\MutableDate;
|
|
|
use Cake\Core\Configure;
|
|
|
use Cake\I18n\FrozenDate;
|
|
|
-use Cake\I18n\FrozenTime;
|
|
|
+use Cake\I18n\FrozenTime as CakeFrozenTime;
|
|
|
use Cake\I18n\Time as CakeTime;
|
|
|
use DateInterval;
|
|
|
use DateTime;
|
|
|
@@ -62,11 +62,11 @@ class Time extends CakeTime {
|
|
|
public function hasDaylightSavingTime($timezone = null) {
|
|
|
$timezone = $this->safeCreateDateTimeZone($timezone);
|
|
|
// a date outside of DST
|
|
|
- $offset = $timezone->getOffset(new FrozenTime('@' . mktime(0, 0, 0, 2, 1, (int)date('Y'))));
|
|
|
+ $offset = $timezone->getOffset(new CakeFrozenTime('@' . mktime(0, 0, 0, 2, 1, (int)date('Y'))));
|
|
|
$offset = $offset / HOUR;
|
|
|
|
|
|
// a date inside of DST
|
|
|
- $offset2 = $timezone->getOffset(new FrozenTime('@' . mktime(0, 0, 0, 8, 1, (int)date('Y'))));
|
|
|
+ $offset2 = $timezone->getOffset(new CakeFrozenTime('@' . mktime(0, 0, 0, 8, 1, (int)date('Y'))));
|
|
|
$offset2 = $offset2 / HOUR;
|
|
|
|
|
|
return abs($offset2 - $offset) > 0;
|
|
|
@@ -119,12 +119,12 @@ class Time extends CakeTime {
|
|
|
|
|
|
$startDate = $start;
|
|
|
if (!is_object($start)) {
|
|
|
- $startDate = new FrozenTime($start);
|
|
|
+ $startDate = new CakeFrozenTime($start);
|
|
|
}
|
|
|
|
|
|
$endDate = $end;
|
|
|
if (!is_object($end)) {
|
|
|
- $endDate = new FrozenTime($end);
|
|
|
+ $endDate = new CakeFrozenTime($end);
|
|
|
}
|
|
|
|
|
|
if ($startDate > $endDate) {
|
|
|
@@ -338,7 +338,7 @@ class Time extends CakeTime {
|
|
|
public function incrementDate($startDate, $years = 0, $months = 0, $days = 0, $timezone = null) {
|
|
|
$dateTime = $startDate;
|
|
|
if (!is_object($startDate)) {
|
|
|
- $dateTime = new FrozenTime($startDate);
|
|
|
+ $dateTime = new CakeFrozenTime($startDate);
|
|
|
if ($timezone) {
|
|
|
$dateTime = $dateTime->setTimezone($this->safeCreateDateTimeZone($timezone));
|
|
|
}
|
|
|
@@ -375,7 +375,7 @@ class Time extends CakeTime {
|
|
|
$secondAge = $firstAge;
|
|
|
}
|
|
|
//TODO: other relative time then today should work as well
|
|
|
- $date = new FrozenTime($relativeTime ?? 'now');
|
|
|
+ $date = new CakeFrozenTime($relativeTime ?? 'now');
|
|
|
|
|
|
$max = mktime(23, 23, 59, (int)$date->format('m'), (int)$date->format('d'), (int)$date->format('Y') - $firstAge);
|
|
|
$min = mktime(0, 0, 1, (int)$date->format('m'), (int)$date->format('d') + 1, (int)$date->format('Y') - $secondAge - 1);
|
|
|
@@ -414,8 +414,13 @@ class Time extends CakeTime {
|
|
|
* @param array<string, mixed> $options
|
|
|
* @return string
|
|
|
*/
|
|
|
- public static function localDate($dateString, $format = null, array $options = []) {
|
|
|
- $defaults = ['default' => '-----', 'timezone' => null];
|
|
|
+ public static function localDate(?string $dateString, ?string $format = null, array $options = []) {
|
|
|
+ $defaults = [
|
|
|
+ 'default' => '-----',
|
|
|
+ 'timezone' => null,
|
|
|
+ 'language' => 'en',
|
|
|
+ 'oclock' => null,
|
|
|
+ ];
|
|
|
$options += $defaults;
|
|
|
|
|
|
if ($options['timezone'] === null && strlen($dateString) === 10) {
|
|
|
@@ -427,32 +432,20 @@ class Time extends CakeTime {
|
|
|
if ($options['timezone']) {
|
|
|
$options['timezone'] = static::safeCreateDateTimeZone($options['timezone']);
|
|
|
}
|
|
|
- $date = new FrozenTime($dateString, $options['timezone']);
|
|
|
- $date = $date->format('U');
|
|
|
-
|
|
|
- if ($date <= 0) {
|
|
|
- return $options['default'];
|
|
|
- }
|
|
|
-
|
|
|
+ $date = new CakeFrozenTime($dateString, $options['timezone']);
|
|
|
if ($format === null) {
|
|
|
if (is_int($dateString) || strpos($dateString, ' ') !== false) {
|
|
|
- $format = FORMAT_LOCAL_YMDHM;
|
|
|
+ $format = 'd.m.Y, H:i';
|
|
|
} else {
|
|
|
- $format = FORMAT_LOCAL_YMD;
|
|
|
+ $format = 'd.m.Y';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $date = static::_strftime($format, (int)$date);
|
|
|
-
|
|
|
- if (!empty($options['oclock'])) {
|
|
|
- switch ($format) {
|
|
|
- case FORMAT_LOCAL_YMDHM:
|
|
|
- case FORMAT_LOCAL_YMDHMS:
|
|
|
- case FORMAT_LOCAL_HM:
|
|
|
- case FORMAT_LOCAL_HMS:
|
|
|
- $date .= ' ' . __d('tools', 'o\'clock');
|
|
|
+ $date = FrozenTime::formatLocalized($date, $format, $options['language']);
|
|
|
|
|
|
- break;
|
|
|
+ if ($options['oclock']) {
|
|
|
+ if (strpos($format, 'H:i') !== false) {
|
|
|
+ $date .= ' ' . __d('tools', 'o\'clock');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -515,7 +508,7 @@ class Time extends CakeTime {
|
|
|
if (strlen($dateString) === 10) {
|
|
|
$date = new FrozenDate($dateString);
|
|
|
} else {
|
|
|
- $date = new FrozenTime($dateString);
|
|
|
+ $date = new CakeFrozenTime($dateString);
|
|
|
}
|
|
|
} else {
|
|
|
$date = $dateString;
|
|
|
@@ -995,7 +988,7 @@ class Time extends CakeTime {
|
|
|
* @return bool True if datetime is not today AND is in the future
|
|
|
*/
|
|
|
public static function isNotTodayAndInTheFuture($dateString, $timezone = null) {
|
|
|
- $date = new FrozenTime($dateString, $timezone);
|
|
|
+ $date = new CakeFrozenTime($dateString, $timezone);
|
|
|
$date = $date->format('U');
|
|
|
|
|
|
return date(FORMAT_DB_DATE, (int)$date) > date(FORMAT_DB_DATE, time());
|
|
|
@@ -1010,7 +1003,7 @@ class Time extends CakeTime {
|
|
|
*/
|
|
|
public static function isInTheFuture($date, $timezone = null) {
|
|
|
if (!($date instanceof DateTimeInterface)) {
|
|
|
- $date = new FrozenTime($date, $timezone);
|
|
|
+ $date = new CakeFrozenTime($date, $timezone);
|
|
|
}
|
|
|
$date = $date->format('U');
|
|
|
|
|
|
@@ -1126,9 +1119,9 @@ class Time extends CakeTime {
|
|
|
* @return string Partial SQL string.
|
|
|
*/
|
|
|
public static function daysAsSql($begin, $end, $fieldName, $timezone = null) {
|
|
|
- $begin = new FrozenTime($begin, $timezone);
|
|
|
+ $begin = new CakeFrozenTime($begin, $timezone);
|
|
|
$begin = $begin->format('U');
|
|
|
- $end = new FrozenTime($end, $timezone);
|
|
|
+ $end = new CakeFrozenTime($end, $timezone);
|
|
|
$end = $end->format('U');
|
|
|
$begin = date('Y-m-d', (int)$begin) . ' 00:00:00';
|
|
|
$end = date('Y-m-d', (int)$end) . ' 23:59:59';
|
|
|
@@ -1281,8 +1274,8 @@ class Time extends CakeTime {
|
|
|
*/
|
|
|
public static function duration($duration, $format = '%h:%I:%S') {
|
|
|
if (!$duration instanceof \DateInterval) {
|
|
|
- $d1 = new FrozenTime();
|
|
|
- $d2 = new FrozenTime();
|
|
|
+ $d1 = new CakeFrozenTime();
|
|
|
+ $d2 = new CakeFrozenTime();
|
|
|
$d2 = $d2->add(new DateInterval('PT' . $duration . 'S'));
|
|
|
|
|
|
$duration = $d2->diff($d1);
|