保持php和header中date时区相同

系统不管时区哪里的,反正走的是GMT标准时间,距 1970 年 1 月 1 日午夜到现在之间经历的毫秒数。但是,有时,我们要指定了php时区,如北京时间,网页显示正确的北京时间很简单

但是js要取得header中date服务器的时间默认是nginx生成的GMT时间,像这样

Sat, 06 Feb 2021 21:26:35 GMT

所以需要转换一下才能得到北京时间,看下面测试代码:

php要设置北京时间这个问题很简单

php代码如下

ini_set('date.timezone','Asia/Shanghai');
if(function_exists('date_default_timezone_set'))
{
date_default_timezone_set('Asia/Shanghai');
}
echo date('Y-m-d h:i:s', time());

那么js通过ajax获取服务器时间却是GMT时间(基于nginx生成),如果是北京时区的客户端

可以通过

<script>
var date = dateTimeFormate($.ajax({async:false}).getResponseHeader("Date"));
console.log(new Date(date)); //转为本地系统时区时间
</script>

似乎是没什么问题,但是外国友人的系统时区也要看北京时间怎么办?

那么再如下代码转换,这样他们看见的也是北京时间。

<script>
function getBeiJingTime(date) {
var d = new Date(date);
var timezone = 8; //目标时区时间,东八区
var offset_GMT = d.getTimezoneOffset(); // 本地时间和格林威治的时间差,单位为分钟
var nowDate = d.getTime(); // 本地时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数
var targetDate = new Date(nowDate + offset_GMT * 60 * 1000 + timezone * 60 * 60 * 1000);
console.log("东8区现在是:" + targetDate);
return targetDate;
}

var date = dateTimeFormate($.ajax({async:false}).getResponseHeader("Date"));
console.log(getBeiJingTime(date)); //转为指定时区北京时间(强迫症)
</script>

如此,php和js获得的时区时间一致了

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注