Я использую один и тот же код более 5 лет, PHP 5.x и внезапно у меня возникли проблемы с strtotime и британскими форматами дат. Я написал этот маленький скрипт для тестирования:
<?php
echo "<br /><b>PostDate: 1-7-15</b>";
$format="d-m-y";
$date="1-7-15";
$c = strtotime($date);
echo "<br /><b>Unix TS: - ".$c."</b>";
$a = date($format,$c) ;
echo "<br /><b>Unix TS to date - ".$a."</b>";
echo "<br /> <br />";
echo "<br /><b>PostDate: 7/1/15</b>";
$format="m/d/y";
$date="7/1/15";
$c = strtotime($date);
echo "<br /><b>Unix TS: - ".$c."</b>";
$a = date($format,$c) ;
echo "<br /><b>Unix TS to date - ".$a."</b>";
?>
Это выводит:
PostDate: 1-7-15
Unix TS: - 995173200
Unix TS to date - 15-07-01PostDate: 7/1/15
Unix TS: - 1435726800
Unix TS to date - 07/01/15
Вы можете ясно видеть, что британская версия не верна, американская версия верна. Версия для Великобритании неправильно конвертируется в метку времени Unix.
Как я уже говорил, я использовал strtotime таким образом годами, вдруг эти результаты? Я схожу с ума?
Я изменил строку:
$c = strtotime($date);
Для того, чтобы:
$c=strtotime(date($format, strtotime($date)));
и это работает для всех форматов даты, даже d M y. Так странно…
Других решений пока нет …