PHP:从本地化格式解析日期 [英] PHP: Parse date from localized format

查看:87
本文介绍了PHP:从本地化格式解析日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在多语言应用程序中解析日期字符串.每个用户都有其语言环境,然后是日期格式.

I need to parse a date string in a multi-language application. Every user has their locale and then their date format.

使用方法:

new DateTime($datestr);

date_parse($datestr);

具有本地化的日期格式?

with the localized date format?

假设mm/dd/yyyy为EN日期格式,并且dd/mm/yyyy为IT日期格式,我进行了此测试:

Assuming mm/dd/yyyy as EN date format and dd/mm/yyyy as IT date format I did this test:

<?php
echo "EN locale<br>\r\n";
setlocale(LC_ALL, 'en_US');
$date="01/02/2015"; //2th Jan
$date_array=date_parse($date);
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']);
$datetime=new DateTime($date);    
echo date("Y-m-d",$mktime);
echo "<br>\r\n";
echo $datetime->format('Y-m-d');
echo "<br>\r\n";

echo "IT locale<br>\r\n";
setlocale(LC_ALL, 'it_IT');
$date="01/02/2015"; //1th Feb
$date_array=date_parse($date);
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']);
$datetime=new DateTime($date);    
echo date("Y-m-d",$mktime);
echo "<br>\r\n";
echo $datetime->format('Y-m-d');

结果是SAME输出,具有两种语言环境设置,以mm/dd/yyyy格式提供解析.输出始终为2015年1月2日(2月2日)

The result is the SAME output, with both locale settings the parse is provided with the mm/dd/yyyy format. The output was always 2015-01-02 (2nd Feb)

推荐答案

这是答案:

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

这是与我的答案一起使用的先前测试.

And this is the previous test working with my answer.

<?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";

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

Unfortunately I cannot earn my bounty... :-)

这篇关于PHP:从本地化格式解析日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆