【问题标题】:PHP intl can convert a Gregorian date to other calendar typePHP intl 可以将公历日期转换为其他日历类型
【发布时间】:2017-09-06 00:55:47
【问题描述】:

PHP intl 可以将公历日期转换为其他日历类型。

例如公历到回历,2017/04/111396/01/22

或者我们必须使用外部库来转换日期?

【问题讨论】:

标签: php intl datetime-conversion hijri


【解决方案1】:

你可以使用这个方法:

function getDateTimeFromCalendarToFormat($format = 'yyyy-MM-dd HH:mm:ss',     $time = null, $locale = 'fa_IR', $calendar = 'persian', $timeZone = 'Asia/Tehran')
{
    if (empty($time)) {
        $time = new \DateTime();
    }

    $formatter = new \IntlDateFormatter("{$locale}@calendar={$calendar}", \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, $timeZone, \IntlDateFormatter::TRADITIONAL);
    $dateArray = [];

    $formatter->setPattern($format);

    return $formatter->format($time);
}

如果您致电getDateTimeFromCalendarToFormat('yyyy-MM-dd HH:mm:ss',null,'en_US')
返回
1396-06-27 13:50:21

如果您致电getDateTimeFromCalendarToFormat('yyyy-MM-dd HH:mm:ss',null,'fa_IR')
返回
۱۳۹۶-۰۶-۲۷ ۱۳:۴۹:۵۱

要使用的新模式字符串。可能的模式记录在Formatting Dates and Times

【讨论】:

  • 为什么? @mohammad-salehi
  • 对不起@honarkhah,这是我的错误,或者可能是 PHP 错误。我使用 'Y-m-d H:i:s' 作为 $format 并且每次都返回错误的月份数。但它适用于'Y-M-d H:i:s'(大写M)。 yyyy 和 Y,或者 i 和 mm 和其他单字母的多字母有什么区别?
  • @MohammadSalehi 您可以查看userguide.icu-project.org/formatparse/datetime,这是您可以使用的模式的完整示例。
【解决方案2】:

是的,它可以。这是一个使用 intl 将时间对象转换为其波斯格式字符串的示例:

function c2persian($time, $toCalender = 'persian', $timezone = 'Asia/Tehran', $locale = 'fa_IR') {
    $formatter = IntlDateFormatter::create($locale, NULL, NULL, $timezone, IntlCalendar::createInstance($timezone, "$locale@calendar=$toCalender"));
    return $formatter->format($time);
}
$time = strtotime("2089-08-09 00:00:00 UTC");
echo c2persian($time);

您可以在php intlCalendar documentation找到更多信息。

【讨论】:

    【解决方案3】:

    PHP已有日期格式功能,需要先用strtotime()函数转换,再用date()得到想要的值

    <?php
    $originalDate = "2017/04/11";
    
    $theDate = strtotime($originalDate);
    
    $theDay = date('d',$theDate);
    $theMonth = date('m',$theDate);
    $theYear = date('Y',$theDate);
    
    $customFormat = date('Y-m-d',$theDate);
    $customFormat2 = date('d/m/Y',$theDate);
    $customFormat3 = date('F j, Y, g:i a',$theDate);
    ?>
    

    此处的示例:https://eval.in/772416

    您可以在此处获取有关 php 日期的更多信息:http://php.net/manual/en/function.date.php

    【讨论】:

    • 人们反对投票,但没有给出任何背景信息。 OP 询问如何完全转换为不同的日历,而不仅仅是如何在其原始日历中转换日期/时间的格式。你的答案是绝对正确的,只是不适合这个问题。
    猜你喜欢
    • 2015-11-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多