Unix时间戳在PHP中给出了不同的结果


Unix time stamp gives different results in PHP

我使用以下代码生成时间戳,对于上的相同输入,我总是得到不同的结果

        $EventDateZone = new DateTime(str_replace('/', '-', $record['Date']), new DateTimeZone(Config::get('app.timezone')));
        $EventDate = strtotime($EventDateZone->format("Y-m-d"));
        $EventTimeZone = new DateTime($record['Time'], new DateTimeZone(Config::get('app.timezone')));
        $EventTime = strtotime($EventTimeZone->format("H:i:s"));

变量$record['Date]包括01/04/2014并且$record['Time']包括09:26:00 AM并且Config::get('app.timezone')Asia/Dubai

转换时间的问题——这里总是不同——是转换时间13985763601398662760 的结果

我需要生成的时间戳是相同的,因为这个记录将存储在数据库中,我不想让它重复。

日期值不包含时间,时间值不包含日期。但是,UNIX时间戳是日期时间值的复合值,必须同时包含这两个值。当您实例化一个新的DateTime对象,并给它一个不完整的时间戳(即缺少日期或时间)时,它会填充当前时间中缺少的值。当然,情况总是不同的。

您必须用两者实例化DateTime对象才能获得UNIX时间戳。您不能分别输出日期和时间的UNIX时间戳,因为这没有任何意义。您的strtotime代码没有任何意义。如果需要,可以稍后再次将DateTime对象分隔为日期和时间组件,但不能分隔为两个单独的UNIX时间戳。

$event = DateTime::createFromFormat(
    'd/m/Y H:i:s',
    "$record[Date] $record[Time]",
    new DateTimeZone(Config::get('app.timezone'))
);
echo $event->getTimestamp();
echo $event->format('Y-m-d');
echo $event->format('H:i:s');