首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:从本地化格式解析日期

PHP:从本地化格式解析日期
EN

Stack Overflow用户
提问于 2015-07-23 17:38:35
回答 2查看 2.3K关注 0票数 17

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

使用方法:

new DateTime($datestr);

date_parse($datestr);

使用本地化的日期格式?

假设EN日期格式为mm/dd/yyyy,日期格式为dd/mm/yyyy,我做了以下测试:

<?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');

结果是相同的输出,对于两种语言环境设置,解析都是以mm/dd/yyyy格式提供的。输出始终为2015-01-02 (2月2日)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-28 15:30:11

这就是答案:

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

不幸的是我不能赢得我的赏金。:-)

票数 8
EN

Stack Overflow用户

发布于 2015-08-28 13:39:17

<?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("m/d/Y",$mktime);
echo "<br>\r\n";
echo $datetime->format('m/d/Y');
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("d/m/Y",$mktime);
echo "<br>\r\n";
echo $datetime->format('d/m/Y');

这些都是更改,但您应该能够复制和粘贴上面的代码,它将以您想要的方式工作。

echo date("d/m/Y",$mktime);
echo date("m/d/Y",$mktime);
echo $datetime->format('m/d/Y');
echo $datetime->format('d/m/Y');

referance http://php.net/manual/en/function.date.php

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31583577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档