Fix incorrect timestamp display when timestamp is zero #2621

This commit is contained in:
Kijin Sung 2025-12-17 11:32:37 +09:00
parent 8e5480674d
commit 0c8aa306ec
2 changed files with 20 additions and 8 deletions

View file

@ -28,11 +28,11 @@ class DateTime
{ {
if ($format === self::FORMAT_RELATIVE) if ($format === self::FORMAT_RELATIVE)
{ {
return self::getRelativeTimestamp($timestamp ?: time()); return self::getRelativeTimestamp($timestamp ?? time());
} }
$offset = Config::get('locale.internal_timezone') ?: date('Z', $timestamp); $offset = Config::get('locale.internal_timezone') ?: date('Z', $timestamp ?? time());
return gmdate($format, ($timestamp ?: time()) + $offset); return gmdate($format, ($timestamp ?? time()) + $offset);
} }
/** /**
@ -46,7 +46,7 @@ class DateTime
{ {
if ($format === self::FORMAT_RELATIVE) if ($format === self::FORMAT_RELATIVE)
{ {
return self::getRelativeTimestamp($timestamp ?: time()); return self::getRelativeTimestamp($timestamp ?? time());
} }
$timezone = self::getTimezoneForCurrentUser(); $timezone = self::getTimezoneForCurrentUser();
@ -55,7 +55,7 @@ class DateTime
self::$_timezones[$timezone] = new \DateTimeZone($timezone); self::$_timezones[$timezone] = new \DateTimeZone($timezone);
} }
$datetime = new \DateTime(); $datetime = new \DateTime();
$datetime->setTimestamp($timestamp ?: time()); $datetime->setTimestamp($timestamp ?? time());
$datetime->setTimezone(self::$_timezones[$timezone]); $datetime->setTimezone(self::$_timezones[$timezone]);
return $datetime->format($format); return $datetime->format($format);
} }
@ -123,7 +123,7 @@ class DateTime
self::$_timezones[$timezone] = new \DateTimeZone($timezone); self::$_timezones[$timezone] = new \DateTimeZone($timezone);
} }
$datetime = new \DateTime(); $datetime = new \DateTime();
$datetime->setTimestamp($timestamp ?: time()); $datetime->setTimestamp($timestamp ?? time());
$datetime->setTimezone(self::$_timezones[$timezone]); $datetime->setTimezone(self::$_timezones[$timezone]);
return $datetime->getOffset(); return $datetime->getOffset();
} }
@ -137,7 +137,7 @@ class DateTime
*/ */
public static function getTimezoneOffsetFromInternal(string $timezone, ?int $timestamp = null): int public static function getTimezoneOffsetFromInternal(string $timezone, ?int $timestamp = null): int
{ {
return self::getTimezoneOffset($timezone, $timestamp ?: time()) - Config::get('locale.internal_timezone'); return self::getTimezoneOffset($timezone, $timestamp ?? time()) - Config::get('locale.internal_timezone');
} }
/** /**
@ -192,7 +192,7 @@ class DateTime
*/ */
public static function getRelativeTimestamp(?int $timestamp = null): string public static function getRelativeTimestamp(?int $timestamp = null): string
{ {
$diff = \RX_TIME - intval($timestamp ?: time()); $diff = \RX_TIME - intval($timestamp ?? time());
$langs = lang('common.time_gap'); $langs = lang('common.time_gap');
if ($diff < 3) if ($diff < 3)

View file

@ -113,6 +113,18 @@ class DateTimeTest extends \Codeception\Test\Unit
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s')); $this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
// Test special dates.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$expected = '1970-01-01 09:00:00';
$this->assertEquals($expected, zdate('19700101', 'Y-m-d H:i:s'));
$expected = '1969-12-31 15:00:00';
$this->assertEquals($expected, zdate('1969-12-31 15:00:00', 'Y-m-d H:i:s'));
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$expected = '1970-01-01 06:00:00';
$this->assertEquals($expected, zdate('19700101000000', 'Y-m-d H:i:s'));
$expected = '1970-01-01 00:00:00';
$this->assertEquals($expected, zdate('19691231180000', 'Y-m-d H:i:s'));
// Restore the internal timezone. // Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
} }