Мне интересно делать сравнения между строкой даты и меткой времени MySQL. Однако я не вижу легкого преобразования. Я не замечаю ничего очевидного?Если у меня есть строка PHP в формате YYYY-DD-MM и временная метка в MySQL, есть ли хороший способ конвертировать между ними?
ответ
Преобразование метки времени в формате:
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.
strtotime() и getdate() - две функции, которые могут использоваться для получения дат от строк и временных меток. Однако нет стандартной библиотечной функции, которая преобразует временные метки MySQL и PHP.
Используйте функцию PHP Date. Возможно, вам придется преобразовать timestamp mysql в временную метку Unix в вашем запросе, используя функцию UNIX_TIMESTAMP в mysql.
Свидание строка вида:
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';
}
Вы можете избежать необходимости использовать strtotime()
или getdate()
в PHP по USI Функция MySQL UNIX_TIMESTAMP()
.
SELECT UNIX_TIMESTAMP(timestamp) FROM sometable
Полученные данные будут стандартным числом Отметка времени Unix, так что вы можете сделать прямое сравнение с time()
.
Я написал эту маленькую функцию, чтобы упростить процесс:
/**
* 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;
}
Я надеюсь, что это помогает
Вся эта функция может быть заменена одним вызовом StrToTime. Зачем изобретать колесо? – 2009-03-11 18:41:42