Если у меня есть строка PHP в формате ГГГГ-ДД-ММ и временная метка в MySQL, есть ли хороший способ конвертировать между ними?
Вопрос
Мне интересно проводить сравнения между строкой даты и меткой времени MySQL.Однако я не вижу простого преобразования.Я упускаю из виду что-то очевидное?
Решение
Преобразование из метки времени в формат:
date('Y-m-d', $timestamp);
Преобразование из форматированного в временную метку:
mktime(0, 0, 0, $month, $day, $year, $is_dst);
Видишь Дата и время действия для получения дополнительной документации.
Когда дело доходит до хранения, вам решать, использовать ли формат даты MySQL для stroing в качестве форматированной даты;как целое число для хранения в виде метки времени UNIX;или вы можете использовать формат метки ВРЕМЕНИ MySQL, который преобразует числовую метку времени в читаемый формат. Проверьте документ MySQL для получения информации о ВРЕМЕННОЙ МЕТКЕ.
Другие советы
Вы можете избежать необходимости использовать strtotime()
или getdate()
в PHP используя 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() и getdate() это две функции, которые можно использовать для получения дат из строк и временных меток.Однако не существует стандартной библиотечной функции, которая преобразует временные метки MySQL и PHP.
Используйте PHP Дата функция.Возможно, вам придется преобразовать временную метку 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';
}