0

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

        $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

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

4

1 回答 1

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');
于 2014-04-28T07:36:55.500 回答