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

Unix时间戳在PHP中给出了不同的结果,php,mysql,timestamp-with-timezone,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

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

        $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

转换时间的问题总是不同,这里是转换时间的结果
1398576360
1398662760


我需要生成的时间戳与此记录存储在数据库中的时间戳相同,并且我不希望重复它。

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

您必须用这两种方法实例化
DateTime
对象才能获得UNIX时间戳。不能分别为日期和时间输出UNIX时间戳,因为这没有任何意义。您的
strotime
代码没有任何意义。如有必要,您可以稍后再次将
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');

你为什么把时间和日期分开?您可以在MySQL中使用DATETIME列。我以CSV格式获取它们,并且我必须以这种方式将它们存储在数据库中。我无法更改它。谢谢,我实现了您的建议,当然时间戳是错误的,因此我现在更改了它的工作方式