首页 > 解决方案 > 如何获得自纪元以来的周数?像米利斯?

问题描述

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

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

所以:

  1. 如何获得自 1970 年以来的当前周数?
  2. 给定这样的周数,如何获取开始和结束日期?

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


说明:

标签: javascriptnode.jstypescriptdatetimetimezone

解决方案


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 时间。


推荐阅读