我的php表单中有一个日期日历,它给出了日期'19 -05-2014'。我应该将此日期与数据库时间修改(1400481271)完全比较。
将'19 -05-2014'转换为UNIX TIME STAMP时,但我得到的结果为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;
}
?>
答案 0 :(得分:1)
您尝试匹配的日期转换为时间戳:
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
,您可以轻松地与字符串进行比较。
或者,如果您甚至可以使用相同的格式检索它,那么您无需使用正则表达式重写日期:
SELECT DATE_FORMAT( FROM_UNIXTIME( timemodified ), '%d-%m-%Y' ) AS modified
这将为19-05-2014
返回1400481271
。