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

时间:2014-04-28 07:31:07

标签: php mysql timestamp-with-timezone

我使用以下代码生成时间戳我总是在

上获得相同输入的不同结果
        $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 AMConfig::get('app.timezone')Asia/Dubai

转换时间总是不同的问题是转换时间13985763601398662760

的结果

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

1 个答案:

答案 0 :(得分:1)

日期值不包含时间,时间值不包含日期。但是,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');