2008-08-21 1 views
6

Мне интересно делать сравнения между строкой даты и меткой времени MySQL. Однако я не вижу легкого преобразования. Я не замечаю ничего очевидного?Если у меня есть строка PHP в формате YYYY-DD-MM и временная метка в MySQL, есть ли хороший способ конвертировать между ними?

ответ

14

Преобразование метки времени в формате:

date('Y-m-d', $timestamp); 

Преобразование из отформатированных в метку времени:

mktime(0, 0, 0, $month, $day, $year, $is_dst); 

См date и mktime для дальнейшей документации.

Когда дело доходит до хранения, зависит от вас, следует ли использовать формат MySQL DATE для обработки в качестве форматированной даты; как целое число для хранения в качестве метки времени UNIX; или вы можете использовать формат TIMESTAMP MySQL, который преобразует числовую метку времени в читаемый формат. Check the MySQL Doc для информации TIMESTAMP.

0

strtotime() и getdate() - две функции, которые могут использоваться для получения дат от строк и временных меток. Однако нет стандартной библиотечной функции, которая преобразует временные метки MySQL и PHP.

0

Используйте функцию PHP Date. Возможно, вам придется преобразовать timestamp mysql в временную метку Unix в вашем запросе, используя функцию UNIX_TIMESTAMP в mysql.

0

Свидание строка вида:

YYYY-MM-DD 

не имеет времени, связанный с ним. MySQL Отметка имеет вид:

YYYY-MM-DD HH:mm:ss 

, чтобы сравнить два, вы должны либо добавить время на строку даты, как полночь, например

$datetime = '2008-08-21'.' 00:00:00'; 

, а затем использовать функцию сравнить время EPOC между ними

if (strtotime($datetime) > strtotime($timestamp)) { 
    echo 'Datetime later'; 
} else { 
    echo 'Timestamp equal or greater'; 
} 
3

Вы можете избежать необходимости использовать strtotime() или getdate() в PHP по USI Функция MySQL UNIX_TIMESTAMP().

SELECT UNIX_TIMESTAMP(timestamp) FROM sometable 

Полученные данные будут стандартным числом Отметка времени Unix, так что вы можете сделать прямое сравнение с time().

2

Я написал эту маленькую функцию, чтобы упростить процесс:

/** 
* Convert MySQL datetime to PHP time 
*/ 
function convert_datetime($datetime) { 
    //example: 2008-02-07 12:19:32 
    $values = split(" ", $datetime); 

    $dates = split("-", $values[0]); 
    $times = split(":", $values[1]); 

    $newdate = mktime($times[0], $times[1], $times[2], $dates[1], $dates[2], $dates[0]); 

    return $newdate; 
} 

Я надеюсь, что это помогает

+0

Вся эта функция может быть заменена одним вызовом StrToTime. Зачем изобретать колесо? – 2009-03-11 18:41:42