PHP UNIX时间戳

时间:2015-08-24 05:35:42

标签: php sql

我的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;
 }
?> 

1 个答案:

答案 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