Дата Время создать из формата - PullRequest
2 голосов
/ 22 августа 2010

Я хочу создать дату с определенным форматом, например, 03-20-2010 имеет формат mdY, но функция даты не понимает эту дату и возвращает неправильную дату

$date = date("Y-m-d", strtotime("03-20-2010"));

Код выше возвращает неправильную датув чем причина и как избежать ошибочного результата?Несколько форматов, которые я хочу, чтобы функция даты распознавала: «Y / m / d», «m / d / Y», «F d, Y», «M d, Y».

Ответы [ 3 ]

23 голосов
/ 22 августа 2010

Как ни странно, заголовок вашего вопроса содержит точное решение проблемы!

Используйте DateTime::createFromFormat. (Примечание: требуется PHP> = 5,3)

Позволяет вам указать точный формат ожидаемой даты, поэтому нет ни одного из strtotime() двусмысленности / англо-американского смещения.

Это должно работать:

$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
5 голосов
/ 22 августа 2010

strtotime не распознает порядок в американском стиле, разделенный '-', но если вы используете разделитель '/', он будет работать просто отлично.

$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));

Как отмечает Пекка, лучше, есливаш кодекс объявляет формат, который вы используете.

1 голос
/ 22 августа 2010

вы можете получить метку времени с помощью mktime и использовать эту метку времени

$exact_time = "03-20-2010";
$exploded_et = explode("-",$exact_time);
$date = date("Y-m-d",mktime(0,0,0,$exploded_et[0],$exploded_et[1],$exploded_et[2]));
...