【发布时间】:2019-05-15 18:56:20
【问题描述】:
我正在尝试格式化过去的日期,但显然没有这样做。
问题是,日期不只是相差几个小时(这可能是由于不同的时区),而是相差 5 天。
这是我的示例代码:
<?php
$locale = "de";
$intlTimezone = \IntlTimeZone::createDefault();
$dateTimezone = $intlTimezone->toDateTimeZone();
$calendar = new \IntlGregorianCalendar($intlTimezone, $locale);
$dateFormatter = \IntlDateFormatter::create($locale, 2, -1, $intlTimezone, $calendar, "dd.MM.y");
$time = DateTimeImmutable::createFromFormat("Y-m-d", "978-12-27", $dateTimezone);
var_dump($time);
var_dump($time->format("d.m.Y"));
var_dump($dateFormatter->format($time));
您可以在 3v4l.org 上看到它:https://3v4l.org/tXVgn
这是输出:
object(DateTimeImmutable)#5 (3) {
["date"]=>
string(26) "0978-12-27 14:31:03.000000"
["timezone_type"]=>
int(2)
["timezone"]=>
string(3) "CET"
}
string(10) "27.12.0978"
string(9) "22.12.978"
最后一个值似乎错误。 另请注意,PHP false。
【问题讨论】:
-
对不起,如果这是重复的,但我已经搜索了问题,但我发现的只是简单的时区问题。
-
我不确定它是否有帮助,但在 978 年,公历没有生效
-
这实际上是一个非常好的观点,谢谢@FedericoklezCulloca 我想我们然后在这里进入“未定义”领域?
-
但看起来 PHP 日期时间函数应该能够根据文档中的此注释处理它 日期和时间信息在内部存储为 64 位数字,因此所有这些都可能有用支持日期(包括负年份)。范围从过去约 2920 亿年到未来相同。