我使用以下代码生成时间戳我总是在
上获得相同输入的不同结果 $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
我需要生成的时间戳是相同的,因为此记录将存储在数据库中,我不想让它重复。
答案 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');