2016-07-16 7 views
1

Я использую тот же код в течение 5+ лет, PHP 5.x, и у меня внезапно возникают проблемы с форматами даты и времени в формате strtotime. Я написал этот небольшой скрипт для проверки:PHP 5.x strtotime не разбирается в британском формате d-m-y правильно

<?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-01 


PostDate: 7/1/15 
Unix TS: - 1435726800 
Unix TS to date - 07/01/15 

Вы можете ясно видеть, что британская версия не является правильным, версия США правильно. Версия в Великобритании не соответствует правильной отметке Unix Time.

Как я уже говорил, я использовал strtotime в течение многих лет, внезапно эти результаты? Я теряю рассудок?

+0

Вы тестировали другие версии php –

+0

Я пробовал 5.4, 5.5, 5.6 и 7.0. 7.0 немедленно сдул мой код, поэтому я побежал за крышкой. – Gerfnad

+0

Спасибо за редактирование. Получил это в следующий раз. – Gerfnad

ответ

0

Я изменил строку:

$c = strtotime($date); 

To:

$c=strtotime(date($format, strtotime($date))); 

и это работает для всех форматов даты, даже г М у. Так странно ...