【问题标题】:PHP and Jquery Countdown Timer Different GMT [duplicate]PHP和Jquery倒数计时器不同的GMT [重复]
【发布时间】:2019-06-03 08:48:18
【问题描述】:

我尝试构建 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

【问题讨论】:

  • 可能是因为 JS date 方法返回的是你的本地日期/时间,而服务器在另一个位置,反之亦然。
  • If no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings for timezone offset. src 在javascript中创建日期时需要指定时区
  • 所以我需要获取时区偏移然后添加到时间?
  • 使用这个:countdown = new Date(countdown.getTime() - countdown.getTimezoneOffset() * 60000);

标签: javascript php date datetime utc


【解决方案1】:

如果您数据库中的所有日期时间值都以 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());

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 2011-10-09
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多