PHP - Разбор даты и времени со строками локали - PullRequest
1 голос
/ 05 августа 2011

Я хочу разобрать даты, например, «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);

Это проблема с локалью?

Спасибо

Ответы [ 3 ]

4 голосов
/ 05 августа 2011

Вам нужно будет перевести его на английский, прежде чем назначить дату.

Создайте массив с испанскими словами, а другой - с соответствующими английскими переводами, как это распознается PHP. Затем просто запустите str_ireplace () с $ dateString.

Как-то так должно работать:

$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 голос
/ 05 августа 2011

В Руководство Я не вижу ничего о других языках.Итак, вам нужно перевести это, как Zumi сказал

0 голосов
/ 10 августа 2017

В эти дни для этой цели существует 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";

К сожалению, я не могу заработать свою награду ...: -)

...