【问题标题】:getDate() giving wrong date due to Daylight saving timezone由于夏令时时区,getDate() 给出错误的日期
【发布时间】:2020-09-24 20:17:21
【问题描述】:

我正在努力以正确的格式格式化 js 日期,但不确定我是否做得对。 所以这是我的情况:

我强烈依赖对象中包含的小时数来导入数据。有时我收到 GMT +1 格式的日期,有时收到 GMT +2 格式的日期。我发现它取决于夏令时日期格式。

但现在的问题是,当我尝试处理这些数据并从 12 月开始查找对象时,函数 getDate() 会在前一天返回我(因为时间是 23:00 GMT +1 不是 格林威治标准时间 00:00 +2)

我正在开发客户端的 oracle 数据库,并在 oracledb npm 包支持的 nodejs 服务器中使用它。

我想知道是否有任何好的/流畅的方法可以将这些日期格式统一为同一个格式?喜欢仅以 GMT +1/+2 格式之一接收所有日期?

感谢您的建议

【问题讨论】:

  • 理想情况下,时间戳应始终以 UTC 格式存储并按原样返回给客户端,因此客户端可以根据本地时区显示日期。为什么日期不是UTC? stackoverflow.com/questions/11537106/…
  • @lux,我正在接收来自 oracledb npm 包的 JS Date 对象。我将 UTC 字符串存储在数据库中,但是,需要对日期对象进行操作才能检索特定日期的日期、小时和分钟
  • 您是否在多台机器上处理日期?为什么有些人有 GMT +1 而其他人有 GMT +2? Oracle 数据库中存储的日期是什么数据类型?如果是 DATE,表中​​存储的日期的时区是什么?
  • @DanMcGhan,我确实从不同的机器获取数据。类型为日期,但时区差异来自夏令时更改。这就是为什么它有时是 gmt +1,有时是 +2。
  • 使用 getUTC* 方法,那么所有机器将获得相同的值,因为本地偏移量将被忽略。

标签: javascript node.js date node-oracledb


【解决方案1】:

这里你要做的是根据getTimezoneOffset()调整时间,然后保存。

MDN

时区偏移量是从本地时间到 世界标准时间。

var d = new Date();
console.log(d)//Time before adjusting the timezone
d.setMinutes(d.getTimezoneOffset());
console.log(d) //time adjusted to UTC

【讨论】:

  • 谢谢,我认为这对我有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2012-04-07
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2012-08-29
  • 2014-07-03
  • 2014-01-25
相关资源
最近更新 更多