Существует ли простой способ преобразовать один формат даты в другой формат даты в 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 рассвет. Что я делаю неправильно?
Вторым параметром к 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);
$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);
Вам нужно преобразовать $old_date обратно в метку времени, так как функция даты date function требует метку времени в качестве второго аргумента.
Попробуйте:
$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));