Преобразуйте один формат даты в другого в PHP

Существует ли простой способ преобразовать один формат даты в другой формат даты в PHP?

У меня есть это:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Но я, конечно, хотел бы, чтобы это возвратило текущую дату, а не трещину 'o рассвет. Что я делаю неправильно?

322
задан Ry- 5 June 2019 в 09:07
поделиться

4 ответа

Вторым параметром к date() должна быть правильная метка времени (секунды с 1 января 1970 года). Вы передаете строку, которую функция date() не может распознать.

Вы можете использовать strtotime() для преобразования строки даты в метку времени. Однако даже функция strtotime() не распознает формат y-m-d-h-h-i-s.

PHP 5.3 и выше

Используйте DateTime::createFromFormat. Это позволяет указать точную маску - используя синтаксис date() - для разбора входящих строковых дат.

PHP 5.2 и ниже

Вам нужно будет вручную разобрать элементы (год, месяц, день, час, минута, секунда), используя substr() и передать результаты в mktime() , которые построят вам метку времени.

Но это много работы! Я рекомендую использовать другой формат, который может понять функция strftime(). strftime() понимает любую дату, короче , когда в следующий раз Джо соскользнет на лед. Например, это работает:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
284
ответ дан 23 November 2019 в 00:56
поделиться
$old_date = date('y-m-d-h-i-s');       // works

Вы делаете неправильно здесь, это должно быть

$old_date = date('y-m-d h:i:s');       // works

Разделитель времени - «:»


Я думаю, что это поможет ...

$old_date = date('y-m-d-h-i-s');              // works

preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_ORDER);
$out = $out[0];
$time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);

$new_date = date('Y-m-d H:i:s', $time); 

или


$old_date = date('y-m-d-h-i-s');              // works

$out = explode('-', $old_date);
$time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);

$new_date = date('Y-m-d H:i:s', $time); 
9
ответ дан 23 November 2019 в 00:56
поделиться

Вам нужно преобразовать $old_date обратно в метку времени, так как функция даты date function требует метку времени в качестве второго аргумента.

6
ответ дан 23 November 2019 в 00:56
поделиться

Попробуйте:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
26
ответ дан 23 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: