неправильное преобразование из григорианского в персидский календарь в некоторые дни

Я хочу использовать PHP IntlDateFormater для использования персидского календаря в моем коде.
В наши дни PHP имеет встроенные функции, которые поддерживают персидский календарь и работает нормально, но у меня есть проблемы с определенными днями.

например, при использовании этого кода все даты преобразуются из григорианского в персидский до даты 2018-3-17, которая преобразуется в «1396-12-26», и после этого дата 2018-3-18 преобразуется в «1397-12-27», которая я не знаю, почему год увеличивается?

мой php код:

class MyDateTime extends \DateTime {
protected $calendar='gregorian';
protected $timezone;
public function __construct() {
$timezone = new \DateTimeZone('Asia/Tehran');
$this->timezone = $timezone;
parent::__construct(null, $timezone);
$this->setCalendar('gregorian');
$this->modify('2018-2-19');
}
public function setCalendar($calendar) {
$this->calendar = strtolower($calendar);
return $this;
}
public function format($pattern){
$formater = new \IntlDateFormatter('en_US' . '@calendar=' . $this->calendar,
\IntlDateFormatter::FULL,  \IntlDateFormatter::FULL, $this->timezone,
$this->calendar == 'gregorian' ? \IntlDateFormatter::GREGORIAN : \IntlDateFormatter::TRADITIONAL, $pattern);
return $formater->format(parent::format('U'));

}
}
$d = new MyDateTime();
$d->setCalendar('gregorian');
echo $d->format('Y-M-d');
$d->setCalendar('persian');
echo " Persian: ".$d->format('Y-M-d')."<br >\n";

echo 'Next mpnth:'." <br>\n";
$d->modify('+26 day');

$d->setCalendar('gregorian');
echo $d->format('Y-M-d');
$d->setCalendar('persian');
echo " Persian: ".$d->format('Y-M-d')."<br >\n";

echo 'Next day:'." <br>\n";
$d->modify('+1 day');

$d->setCalendar('gregorian');
echo $d->format('Y-M-d');
$d->setCalendar('persian');
echo " Persian: ".$d->format('Y-M-d')."<br >\n";

Выход:

2018-2-19 Persian: 1396-11-30
Next mpnth:
2018-3-17 Persian: 1396-12-26
Next day:
2018-3-18 Persian: 1397-12-27

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]