PHP DateTime给出的值不正确
我想知道为什么这个php代码给出了不正确的输出值PHP DateTime给出的值不正确,php,datetime,persian,persian-calendar,jalali-calendar,Php,Datetime,Persian,Persian Calendar,Jalali Calendar,我想知道为什么这个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的输出也不正确 谁能帮忙吗
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
的输出也不正确
谁能帮忙吗。
谢谢。日期时间闰年代码适用公历规则,不适用于波斯历 “除以4,但除400外不除以100”规则对波斯日历无效,波斯日历采用不同的算法:
https://www.timeanddate.com/date/iran-leap-year.html
基本上,波斯日期不能使用DateTime
。另见。你可能会适应
更新:事实上,不同的日历和来源似乎不同意闰年。Jalali将1397作为闰年,但波斯日历没有?PHP将日期对象内部存储为结构 但DateTime init没有验证功能,只将给定的日期字符串转换为时间戳。 在创建日期对象之前,应该使用
谢谢大家的回复 当我要将
Jalali
日期转换为Gregorian
日期时,我试图为我的Jalali
日期字符串(“1397/02/29”)
创建一个PHPDateTime
对象,然后使用将date对象转换为Gregorian
日期对象。我通过直接将我的Jalali
date字符串转换为我想要的字符串,解决了这个问题,如下所示:
$jalali_date = explode("/", request()->to);
$gregorian_date_time = \jDateTime::toGregorianDate($jalali_date[0], $jalali_date[1], $jalali_date[2])->setTime(23, 55)->format("Y-m-d H:i");
return $gregorian_date_time;
再次感谢大家 我怀疑今年有2月29日。@u_mulder这是一个波斯日期并退出。我想
DateTime
类不支持您的日历。它不能解决问题,checkdate()
函数验证Gregorian
日期,但我使用的日期是Jalali
。
$jalali_date = explode("/", request()->to);
$gregorian_date_time = \jDateTime::toGregorianDate($jalali_date[0], $jalali_date[1], $jalali_date[2])->setTime(23, 55)->format("Y-m-d H:i");
return $gregorian_date_time;