【问题标题】:PHP - Parse datetime with locale stringsPHP - 使用语言环境字符串解析日期时间
【发布时间】:2011-08-05 09:14:52
【问题描述】:

我想解析日期时间,例如“Ayer,16:08”,在西班牙语中是“昨天,16:08”。

我试过了

$dateString = 'Ayer, 16:08';
setlocale(LC_ALL, 'es');
$time = strtotime($dateString);
echo date('d-m-Y H:i', $time);

但它回响了

01-01-1970 00:00

尽管如此,如果我用英文字符串做它就可以了:

$dateString = 'Yesterday, 16:08';
$time = strtotime($dateString);
echo date('d-m-Y H:i', $time);

是语言环境的问题吗?

谢谢

【问题讨论】:

    标签: php datetime locale strtotime


    【解决方案1】:

    您需要在确定日期之前将其翻译成英文。

    创建一个包含西班牙语单词的数组,以及另一个包含 PHP 识别的相应英文翻译的数组。然后只需使用 $dateString 运行 str_ireplace()。

    这样的事情应该可以工作:

    $spanish = array("spanish1", "spanish2", "spanish3");
    $english = array("en_translation_of_spanish1", "en_translation_spanish2", "en_translation_of_spanish3");
    $dateString = str_ireplace($spanish, $english, 'Ayer, 16:08');
    

    【讨论】:

      【解决方案2】:

      Manual 我看不到其他语言的任何信息。所以,你需要翻译它,就像Zumi 说的那样

      【讨论】:

        【解决方案3】:

        现在有 IntlDateFormatter 用于此目的,请参阅此 stackoverflow 答案:https://stackoverflow.com/a/32265594/682317

        复制到这里:

        这就是答案:

        $formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
        $unixtime=$formatter->parse($date);
        

        这是与我的答案一起使用的上一个测试。

        <?php
        echo "EN locale<br>\r\n";
        $date="01/02/2015"; //2th Jan
        $formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
        $unixtime=$formatter->parse($date);
        $datetime=new DateTime();
        $datetime->setTimestamp($unixtime);
        echo $datetime->format('Y-m-d');
        echo "<br>\r\n";
        
        echo "IT locale<br>\r\n";
        $date="01/02/2015"; //1th Feb
        $formatter = new IntlDateFormatter("it_IT", IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
        $unixtime=$formatter->parse($date);
        $datetime=new DateTime();
        $datetime->setTimestamp($unixtime);
        echo $datetime->format('Y-m-d');
        echo "<br>\r\n";
        

        不幸的是,我无法获得赏金...... :-)

        【讨论】:

          猜你喜欢
          • 2014-03-15
          • 2012-04-14
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 2021-01-27
          • 2011-11-03
          • 1970-01-01
          • 2021-07-04
          相关资源
          最近更新 更多