Функция PHP для получения формата даты?

Я знаю, как использовать строки формата даты, чтобы превратить date('Y/m/d H:i:s'); в 2009/12/18 11:37:45.

Я хотел бы функцию, которая может делать обратное - смотреть на отформатированную дату, а затем возвращать формат. Есть ли такой в ​​PHP?

Причина в том, что в нашей базе данных сохранены метки времени в различных форматах, и я пишу инструмент, обрабатывающий все наши старые таблицы и анализирующий записи дат.

РЕДАКТИРОВАТЬ: поэтому я думаю, что нет прямого способа сделать это. Я думал, что мог бы использовать функцию strftime(), которая возвращает время в секундах с начала эпохи. Итак, лучший вопрос: могу ли я использовать это время в секундах в полях меток времени в базе данных mySQL? Я предполагаю, что это сработает, если таблица структурирована как метка времени, а не как varchar, что иногда бывает.


person tkotitan    schedule 18.12.2009    source источник
comment
Вы можете столкнуться с проблемами локализации с такими датами, как 2009/10/07. Это Г/м/д или Г/д/м?   -  person Andy E    schedule 18.12.2009


Ответы (6)


Нет, такой функции нет. Вам нужно будет написать набор совпадений регулярных выражений, которые выражают все возможные варианты, например.

$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
person fooquency    schedule 18.12.2009
comment
Это лучше, чем мой ответ, потому что вы помещаете все определения в массив вместо кучи кода. - person gahooa; 18.12.2009

Да, для этого существует функция: strtotime()

strtotime — Преобразует любое текстовое описание даты и времени на английском языке в временную метку Unix.

РЕДАКТИРОВАТЬ: Хорошо, функция может не возвращать используемое форматирование, но вы получите метку времени, а затем сможете сохранить ее в любом формате.

person qualbeen    schedule 18.12.2009

Взгляните на strptime().

person Alix Axel    schedule 18.12.2009

Вы можете использовать регулярное выражение для определения определенных форматов даты. Вы можете добавлять в свой список регулярных выражений, пока не получите 100% покрытие.

if(preg_match('/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/', $Date))
    $Format = 'Y/m/d H:i:s';

так далее...

person gahooa    schedule 18.12.2009

Вам не нужно получать дату в формате m/d/Y. Вы можете использовать strtotime для преобразования любой действительной даты в любой другой формат даты, который вы хотите.

date( 'format', strtotime($date) );
person Galen    schedule 18.12.2009

Может быть, лучше сохранить их все как временные метки unix, тогда вы сможете очень легко форматировать их на лету в зависимости от того, что хотят видеть ваши пользователи.

person thetaiko    schedule 18.12.2009