php - неправильное преобразование даты из григорианского в персидский в последний день месяца
Я хочу преобразовать григорианское время в персидское время. Вот мой код:
public function convertToJalali(DateTime $gregorianDateTime)
{
if ($gregorianDateTime->year < 1) {
$gregorianDateTime = new DateTime('1970-01-01');
}
$this->dateTime['gregorian'] = $gregorianDateTime;
$fmt = new \IntlDateFormatter(
'en_US@calendar=gregorian',
IntlDateFormatter::SHORT, //date format
IntlDateFormatter::NONE, //time format
'UTC',
IntlDateFormatter::TRADITIONAL,
'yyyy/MM/dd HH:mm:ss'
);
$time = $fmt->parse($gregorianDateTime);
$formatter = \IntlDateFormatter::create(
"en_US@calendar=persian",
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Asia/Tehran',
IntlDateFormatter::TRADITIONAL,
'yyyy/MM/dd HH:mm:ss'
);
try {
$this->dateTime['jalali'] = new DateTime($formatter->format($time));
$this->dateTime['jalali']->setTimeZone(new \DateTimeZone('Asia/Tehran'));
} catch (\Exception $ex) {
$this->dateTime['jalali'] = new DateTime(date('Y-m-d H:i:s'), new \DateTimeZone('Asia/Tehran'));
}
return $this;
}
Все работает как шарм, кроме последнего дня месяца, например, у второго персидского календаря есть 31 день, однако у второго григорианского времени даты есть 28 дней, когда дата равна 29 (на персидском языке), он неправильно преобразовывает его в первый день третьего месяца. Любое предложение?