我目前正在报告文件修改时间,如下所示:
$this->newScanData[$key]["modified"] = filemtime($path."/".$file);
$modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"]);
对我来说,我认为没有任何问题,但我的代码的用户报告的时间是4小时。我能想到这一点的唯一原因是因为服务器与用户处于不同的时区。每个用户都有一个变量,我可以使用$gmt_offset
来存储用户所在的时区。$gmt_offset
存储为基本浮动偏移。
服务器可以处于任何时区,不一定是GMT-0。服务器可能与用户不在同一时区。
如何让$modifiedtime
根据$gmt_offset
在其时区内为用户提供正确的时间?
答案 0 :(得分:2)
filemtime()
将根据服务器的时钟返回unix时间戳。由于您有 user to gmt offset 可用,您必须将unix时间戳转换为GMT,然后转换为用户的timszone,如下所示:
<?php
list($temp_hh, $temp_mm) = explode(':', date('P'));
$gmt_offset_server = $temp_hh + $temp_mm / 60;
$gmt_offset_user = -7.0;
$timestamp = filemtime(__FILE__);
echo sprintf('
Time based on server time.........: %s
Time converted to GMT.............: %s
Time converted to user timezone...: %s
Auto calculated server timezone...: %s
',
date('Y-m-d h:i:s A', $timestamp),
date('Y-m-d h:i:s A', $timestamp - $gmt_offset_server * 3600),
date('Y-m-d h:i:s A', $timestamp - $gmt_offset_server * 3600 + $gmt_offset_user * 3600),
$gmt_offset_server
);
// Output based on server timezone = PKT (+05:00 GMT) and user timezone = PDT (-07:00 GMT)
// Time based on server time.........: 2011-06-09 03:54:38 PM
// Time converted to GMT.............: 2011-06-09 10:54:38 AM
// Time converted to user timezone...: 2011-06-09 03:54:38 AM
// Auto calculated server timezone...: 5
答案 1 :(得分:1)
您需要的是strtotime()
功能。将日期更改为gmdate,将服务器时间转换为GMT
例如,如果您需要时间格式,如10:00:00
gmdate("H:i:s", strtotime($gmt_offset . " hours"));
更多信息:
答案 2 :(得分:1)
$modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"] + ($gmt_offset * 3600));
$ gmt_offset应为float类型,而不是int类型 - 某些时区可能存在小数差异,例如阿德莱德GMT +09:30