2011-08-05 38 views
1

我想用西班牙语解析'Ayer,16:08'这是'昨天,16:08'的日期时间。PHP - 使用语言环境字符串解析日期时间

我已经试过这

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

这是个问题用locale?

感谢

回答

4

你需要做的日期之前把它翻译成英文。

如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'); 
1

Manual我看不到别人的语言什么。所以,你需要把它翻译,作为Zumi

0

这些天有IntlDateFormatter为了这个目的,看到这个计算器的答案: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"; 

可惜我不能赚我的赏金... :-)