2014-01-03 3 views
5

Я использую следующий кодПочему strtotime() задает неправильную дату?

$t = strtotime('Saturday, 28 Dec, 2013'); 
echo date('d/m/Y H:i',$t); 
// output : 03/01/2015 20:13 

$t = strtotime('Wednesday, 01 Jan, 2014'); 
echo date('d/m/Y H:i',$t); 
// output: 01/01/2014 20:14 

Первый пример печатает неправильную дату, а второй выводит правильную дату.

Почему это и как его исправить?

+0

И ваш вопрос? – putvande

+0

@putvande Самостоятельно. Почему «суббота, 28 декабря 2013 года» анализируется на выпуск «3 января 2015 года»? –

+6

Используйте '$ t = strtotime ('Saturday, 28 Dec 2013');' – Clive

ответ

6

strtotime только понимает specific set of formats. Если ваш вход не находится в одном из этих форматов, он сделает все возможное, чтобы угадать, но, как вы можете видеть, результаты могут отличаться.

Попробуйте это:

$t = date_create_from_format("D, d M, Y","Saturday, 28 Dec, 2013"); 
echo date_format($t,"d/m/Y H:i"); 
+0

Спасибо, брат. Он решил. –

6

У вас есть ненужная запятая после месяца. Удалите это, и ваш код будет работать как задумано:

$t = strtotime('Saturday, 28 Dec 2013'); 
echo date('d/m/Y H:i',$t); 

$t = strtotime('Wednesday, 01 Jan 2014'); 
echo date('d/m/Y H:i',$t); 

Но я хотел бы предложить вам, чтобы использовать DateTime класс для этого вместо. Таким образом, вы можете использовать любой формат даты вы хотите:

$date = DateTime::createFromFormat('l, d M, Y', 'Saturday, 28 Dec, 2013'); 
echo $date->format('d/m/Y H:i'); 

$date = DateTime::createFromFormat('l, d M, Y', 'Wednesday, 01 Jan, 2014'); 
echo $date->format('d/m/Y H:i'); 
Смежные вопросы