Как получить конкретный результат от моей функции IntlDateFormatter ().? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть эта функция для преобразования григорианской даты в дату Джалали (персидская):

function toJalali ($date)
{
  $fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL);
  return $fmt->format($date);
}

когда я называю это toJalali(time()) это дает мне полную дату (1397-8-17 ه.ش ...)

как я могу получить свой конкретный формат даты из вышеуказанной функции.?

я знаю, что параметры формата могут быть установлены в конструкторе:

$fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL, 'MM/dd/yyyy');

но как насчет того, когда мне нужны другие форматы времени ??

как только year : (yyyy) или (EEEE/yyyy/MM) или т. Д., Поэтому я должен написать отдельную функцию для каждого формата даты .?

Спасибо.

1 Ответ

0 голосов
/ 09 ноября 2018

Чтобы изменить шаблон, вы можете использовать метод setPattern следующим образом:

$fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL, 'MM/dd/yyyy');
$fmt->setPattern('EEEE/yyyy/MM');
echo  $fmt->format(0);

И ваша функция будет выглядеть следующим образом:

function toJalali ($date, $pattern = null)
{
  $fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL);
  if ($pattern){
     $fmt->setPattern($pattern);
  }

  return $fmt->format($date);
}
...