我想将太阳历转换为格里历
我用IntlDateFormatter写了这段代码
但不是工作
function shamsi_to_miladi($date)
{
$now = new DateTime($date);
$IntlDateFormatter = new IntlDateFormatter(
'en_US@calendar=gregorian',
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
NULL,
IntlDateFormatter::TRADITIONAL,
"Y/MM/dd"
);
return $IntlDateFormatter->format($now);
}
echo shamsi_to_miladi("1402/08/17");
尝试真正的工作,但不是工作
产出
但真的2023/10/11
1条答案
按热度按时间yruzcnhs1#
你现在有几个问题。首先,你不需要使用
DateTime
对象,因为它将假定格里高利无保留。由于输入是一个阳历日期,因此您希望使用波斯阳历将其传递给解析函数。这将返回一个unix纪元整数,这是日历不可知的。然后将格式化程序的日历转换为Gregorian,以便输出正确的格式。您还使用
Y
作为“一年中的星期”,这是一种不同的日历计算方法。最好坚持使用yyyy
标准年格式进行解析,因为前者会从日期中删除很多年。正如我的侧记,我不是所有的太阳历熟悉,但你提供的输出日期(2023/10/11)似乎是不正确的。我将太阳日1402/07/09传递到多个在线转换器中,答案总是2023/11/08,这就是下面的函数产生的结果: