2011-08-05 40 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"; 

可惜我不能賺我的賞金... :-)