Функция PHP, чтобы получить формат даты? - PullRequest
4 голосов
/ 18 декабря 2009

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

Мне нужна функция, которая может делать обратное - посмотреть на отформатированную дату, а затем вернуть формат. Есть ли в PHP один?

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

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

Ответы [ 6 ]

3 голосов
/ 18 декабря 2009

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

$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
2 голосов
/ 18 декабря 2009

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

1 голос
/ 18 декабря 2009

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

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

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

0 голосов
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

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

date( 'format', strtotime($date) );
0 голосов
/ 18 декабря 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';

и т.д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...