我有一个日期日历在我的php形式,给我日期'19-05-2014'。我应该准确地将此日期与数据库时间修改(1400481271)进行比较。
将'19-05-2014'转换为UNIX时间戳,但我得到的结果是1397858400,这是一个错误的时间戳。
id userid timemodified
370 23 1400481271
329 24 1427771915
333 30 1428309816
332 32 1428303307
327 33 1427689703
328 34 1427710711
<?php
if ( preg_match('/^(?P<day>'d+)[-'/](?P<month>'d+)[-'/](?P<year>'d+)$/', '19-05-2014', $matches) )
{
$timestamp = mktime(0, 0, 0, ( $matches['month'] - 1 ), $matches['day'], $matches['year']);
echo $timestamp;
}
?>
您尝试匹配的日期为,转换为时间戳:
1400457600
如果你得到一个不同的值,你转换错了(可能是切换了日期和月份或类似的东西)。
虽然接近,但仍然与数据库中的给定值1400481271
不相同。如果将其转换回可读日期,原因就很清楚了:
05/19/2014 @ 6:34am (UTC) 1400481271
为比较,给定日期:
05/19/2014 @ 12:00am (UTC) 1400457600
正如你所看到的,这是不同的,因为它是相同的日期,但不同的时间。
最简单的方法是从数据库中只检索日期部分。
您可以在SQL查询中这样做:
SELECT DATE( FROM_UNIXTIME( timemodified ) ) AS modified
这将返回2014-05-19
,您可以轻松地将其与字符串进行比较。
或者,如果你甚至可以用你得到它的相同格式检索它,那么你不需要用regex重写你的日期:
SELECT DATE_FORMAT( FROM_UNIXTIME( timemodified ), '%d-%m-%Y' ) AS modified
这将为1400481271
返回19-05-2014
。