Я знаю, как использовать строки формата даты, чтобы повернуть date('Y/m/d H:i:s');
в 2009/12/18 11:37:45
.
Мне нужна функция, которая может сделать обратное – посмотрите на форматированную дату и верните формат. Есть ли в PHP?
Причина в том, что у нас есть временные метки, сохраненные в нашей базе данных в различных форматах, и я пишу инструмент, обрабатывающий все наши старые таблицы и анализируя записи даты.
EDIT: поэтому я думаю, что нет прямого способа сделать это. Я думал, что могу использовать strftime (), который возвращает время в секундах с эпохи. Так что лучше сказать, могу ли я использовать это время в секундах в полях timestamp в базе данных mySQL? Я бы предположил, что это сработает, если таблица будет структурирована как метка времени, а не varchar, которая иногда есть.
Нет, такой функции нет. Вам нужно будет написать набор совпадений регулярных выражений, которые выражают все возможные варианты, например
$variations = array ( '^([0-9]{4})/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{4}2$' => 'Y/m/d H:i:s', // more here ); foreach ($dateFromDatabase as $date) { foreach ($variations as $regexp => $dateFormat) { if (preg_match ('|' . $regexp . '|', $date)) { $matches[$dateFromDatabase] = $dateFormat; break; } } } // $matches now consists of an array of dates => format
Взгляните на strptime () .
Да, для этого существует функция: strtotime ()
strtotime – проанализировать любое текстовое описание даты и времени на английском языке в метке времени Unix
EDIT: Хорошо, функция может не вернуть используемое форматирование, но вы получите метку времени, а затем сможете сохранить ее в любом формате.
Вы можете использовать regexp для идентификации определенных форматов дат. Вы можете добавить в свой список регулярных выражений, пока не получите 100% -ный охват.
if(preg_match('/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/', $Date)) $Format = 'Y/m/d H:i:s';
и т.д…
Вам не нужно получать дату в формате m / d / Y. Вы можете использовать strtotime, чтобы превратить любую действительную дату в любой другой формат даты, который вы хотите.
date( 'format', strtotime($date) );
Возможно, это лучшая идея сохранить их все как временные метки unix, тогда вы можете легко их отформатировать на лету в зависимости от того, что ваши пользователи хотят видеть.