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 (на персидском языке), он неправильно преобразовывает его в первый день третьего месяца. Любое предложение?

0 ответов

Другие вопросы по тегам