我有一个需要支持时区的PHP应用程序。现在我正在将日期和时间值作为整数存储在数据库中。这是我的做法。
我不理解的是,即使一个人身处新西兰(太平洋/奥克兰),并且应用程序存储了这个日期:2010年12月24日00:00:00,使用上面的代码,该值的返回值为:1293102000。
然后,使用完全相同的日期/时间,并将时区设置为伦敦(欧洲/伦敦),我得到了这个时间戳:1293148800。
为什么时间戳不同?我以为时间戳应该是与Unix纪元相同日期的秒数?
如果它们不同,那就意味着当有人在数据库中搜索所有记录在2010年12月24日00:00:00至2010年12月24日23:59:59之间的记录时,我需要使用用户时区来创建时间戳,并且必须首先使用时区来创建时间戳。
救命啊!
// now create the DateTime object for this time and user time zone
$dtime = new DateTime($date_time, new DateTimeZone($time_zone));
$timestamp = $dtime->format('U');
我不理解的是,即使一个人身处新西兰(太平洋/奥克兰),并且应用程序存储了这个日期:2010年12月24日00:00:00,使用上面的代码,该值的返回值为:1293102000。
然后,使用完全相同的日期/时间,并将时区设置为伦敦(欧洲/伦敦),我得到了这个时间戳:1293148800。
为什么时间戳不同?我以为时间戳应该是与Unix纪元相同日期的秒数?
如果它们不同,那就意味着当有人在数据库中搜索所有记录在2010年12月24日00:00:00至2010年12月24日23:59:59之间的记录时,我需要使用用户时区来创建时间戳,并且必须首先使用时区来创建时间戳。
救命啊!
format("U")
应该返回一个GMT时间戳,而不考虑时区。 - Gabi Purcaru