首页 > 解决方案 > PHP 和 Jquery 倒数计时器不同的 GMT

问题描述

我尝试构建 jquery 倒数计时器,但结束日期在带有时间戳自定义格式的 mysql 数据库中

这是我在数据库中保存的日期。

2019-01-09 12:48:29

该日期是 GMT+0000,即 UTC。但是当我尝试在 javascript 中显示它时,如下所示

var countdown = new Date("<?php echo $getDate['date_end'];?>");
console.log(countdown);

它将显示输出

Wed Jan 09 2019 12:48:29 GMT+0700 (GMT+07:00)

这是错误的,因为当我将 $getDate['date_end'] 保存到我的数据库时,它是 UTC 格式(+0000),为什么它在 JavaScript 中变成 GMT +0700?

我尝试使用此代码将其转换为 UTC

var countdown = new Date("<?php echo $getRound['date_end'];?>");
var a = countdown.toUTCString();
console.log(a);

但输出会给出不同的时间

Wed, 09 Jan 2019 05:48:29 GMT

标签: javascriptphpdatedatetimeutc

解决方案


如果数据库中的所有日期时间值都以 UTC 格式存储,那么您可以new Date(Date.UTC(...))在解析数据库中的日期时间字符串后使用 UTC 格式创建 js 日期对象。new Date()由于浏览器实现不一致,不建议解析日期时间字符串,因此下面的示例包括一些手动解析和调整月份值对js中使用的月份索引的调整。

const s = '2019-01-09 12:48:29';
const [y, m, d, hh, mm, ss] = s.match(/\d+/g);
const utc = new Date(Date.UTC(y, m - 1, d, hh, mm, ss));
console.log('OUTPUT may vary:', utc);
console.log('UTC datestring:', utc.toUTCString());
console.log('Local datestring:', utc.toLocaleString());


推荐阅读