首页 > 解决方案 > PHP DateTime 给出不正确的值

问题描述

我想知道为什么这个 php 代码给出了不正确的输出值。

dd(new \DateTime("1397/02/29", new \DateTimeZone('Asia/Tehran')));

它输出以下对象:

DateTime @-18076965944 {#1256 ▼
  date: 1397-03-01 00:00:00.0 Asia/Tehran (+03:25)
}

如您所见,日期不正确,必须是1397-02-01. 值的输出1397/02/30 && 1397/02/31也不正确。

任何人都可以帮忙吗?谢谢。

标签: phpdatetimepersianpersian-calendarjalali-calendar

解决方案


DateTime 闰年代码应用公历规则,它们不适用于波斯历。

“除以 4 但不是 100,除了 400”规则对波斯历无效,它遵循不同的算法:

https://www.timeanddate.com/date/iran-leap-year.html

基本上,您不能DateTime用于波斯日期。另请参见此处。您可能会修改一些其他代码

更新:实际上,似乎不同的日历和来源不同意闰年。Jalali 有 1397 作为闰年,但波斯历没有?


推荐阅读