PHP文件修改时间使用GMT偏移设置报告正确的时间
我目前正在报告文件修改时间,如下所示:PHP文件修改时间使用GMT偏移设置报告正确的时间,php,datetime,timezone,gmt,filetime,Php,Datetime,Timezone,Gmt,Filetime,我目前正在报告文件修改时间,如下所示: $this->newScanData[$key]["modified"] = filemtime($path."/".$file); $modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"]); 对我来说,我认为这没有什么错,但是我代码的一个用户报告时间是4小时。我能想到这一点的唯一原因是服务器与用户处于不同的时区。每个用户
$this->newScanData[$key]["modified"] = filemtime($path."/".$file);
$modifiedtime = date($date_format." ".$time_format, $this->newScanData[$key]["modified"]);
对我来说,我认为这没有什么错,但是我代码的一个用户报告时间是4小时。我能想到这一点的唯一原因是服务器与用户处于不同的时区。每个用户都有一个变量,我可以使用它来存储用户所在的时区<代码>$gmt\u偏移量存储为基本浮动偏移量
服务器可以位于任何时区,不一定位于GMT-0。服务器可能与用户不在同一时区
如何根据
$gmt\u offset
获取$modifiedtime
以使用户在其时区内拥有正确的时间?您需要的是strotime()
函数。将日期更改为gmdate,将服务器时间转换为GMT
例如,如果您需要10:00:00这样的时间格式
gmdate("H:i:s", strtotime($gmt_offset . " hours"));
更多信息请点击此处:
$gmt\u offset应该是float类型,而不是int类型——某些时区可能有分数差,例如阿德莱德的gmt+09:30将根据服务器的时钟返回unix时间戳。由于用户到gmt的偏移量可用,因此必须将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
如何存储用户的时区?作为整数偏移量?是的。对不起,忘了提那件事。例如$gmt_offset=-4;你的服务器在GMT时区吗?@Pekka服务器可能在世界上任何地方。所以你也需要服务器时区?但这样行吗?如果服务器在GMT-2,而用户在GMT-4,该怎么办?这个答案是在我澄清您也需要服务器的偏移量之前给出的。所以它不会像那样工作。将编辑答案在哪里输入filetime()
的$timestamp
值?这类似于:gmdate(“H:I:s”),($timestamp+($gmt\u offset*3600))代码>谢谢,我自己也有同样的代码。现在正在测试。这里你假设服务器是GMT-0?@Brady:不,这里的偏移量是相对于服务器时间的。您可以为服务器时区添加额外的更正(例如,$server\u offset
)@LazyOne:以及如何检查服务器时间的时区?@XpertEase2:如果您知道服务器位于何处/您在那里设置了哪个时区,那么$server\u offset
可以硬编码/声明为常量。如果需要动态计算,请查看抱歉的LazyOne,但我不能保证DateTime类在所有服务器上都可用。
<?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