【问题标题】:How to get week number since epoch? Like millis?如何获得自纪元以来的周数?像米利斯?
【发布时间】:2020-10-10 12:01:45
【问题描述】:

我正在为 DynamoDb 中的每周报告商店建模。

我认为识别报告记录的最佳方法是使用自 1970 年以来各自的周数。很像纪元毫秒。

因此:

  1. 如何获取自 1970 年以来的当前周数?
  2. 如何在给定周数的情况下获取开始和结束日期?

考虑到我可能不知道的所有可能的边缘情况,比如夏令时和类似情况,我很难解决这个问题。


说明:

  • 每周从周日晚上午夜开始。
  • 为了计算出准确的时间,函数 1. 以分钟为单位接收所需的 UTC 偏移量。 (我愿意在这里接受建议)

【问题讨论】:

  • 要开始这个项目,我建议您详细了解一周开始的含义。中欧当地时间每周一是午夜吗? UTC 时间是每周日午夜吗?您所在的司法管辖区是否自 1970 年以来日光时间转换规则发生了变化?这些东西很难做到完美。
  • @O.Jones 好点。问题已更新。

标签: javascript node.js typescript datetime timezone


【解决方案1】:

UNIX 时间从 1970 年 1 月 1 日开始以秒为单位。

那天是星期四。因此,UNIX 纪元第零周(从该日期开始)的星期日 UTC 午夜发生在 UNIX 时间的 -345 600 秒。第一周的午夜星期日发生在 UNIX 时间的 259 200 秒。

UNIX 时间日历不包含闰秒,因此每周正好是 7 天,长 604 800 秒。

因此,要从 UNIX 时间获取 UTC 中的星期数,请执行此操作。

(unixTime + 345600) div 604800

Javascript 时间戳是以毫秒为单位的 UNIX 时间戳。所以,在 JS 中,就是

Math.floor ((jsTimestamp + 345_600_000) / 604_800_000)

要从周数中获取周日午夜的 Javascript 时间戳,请反转操作。

(weekNumber * 604_800_000) + 345_600_000

这都是 UTC 时间。

【讨论】:

  • 谢谢先生!请给我一两天的时间来复习。没想到这么快就有答案了 :) 1970 年没有从星期一开始,真是太棒了!
  • 周数通常从 1 开始,这假设第一周是 0。
  • @RobG 那么我们可以 +1 吗? ?
猜你喜欢
  • 2022-10-05
  • 2020-02-11
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2013-05-02
  • 2021-09-12
  • 2012-12-24
相关资源
最近更新 更多