【问题标题】:Javascript Convert BigInt to Datetime and FormatJavascript 将 BigInt 转换为日期时间和格式
【发布时间】:2021-10-26 23:01:08
【问题描述】:

我有一个返回时间戳的方法,它是一个 bigint。

内置的 Date 方法只接受一个数字来创建日期时间。是否有其他函数或方法可以采用 bigint 并将其转换为日期。

本质上类似于 Java 的 DateTimeFormatter 类。

如果可能的话,是否有一种方法可以将日期格式化为带有“yyyyMMdd”模式的字符串,以寻找类似于 Java 的内容

DateTimeFormat.forPattern

时间戳是自纪元时间以来的毫秒数

let time = 1630017759934 

【问题讨论】:

  • 所有问题的答案都是肯定的。您能分享您尝试过的代码和遇到的错误吗?当你说你有一个bigint 是一个时间戳时,你能用一些示例来详细说明吗?
  • 如果您需要 bigint 大小,您会保存什么样的日期? Unix 纪元时间大小为 10 位(如果您确定毫秒,则为 13)。如果您对 unix 纪元时间中的小时间测量有一些极端要求并且只需要 yyyyMMdd 那么您总是可以将您的时间分开以使其更小并首先将其转换为数字。即毫秒 persision 到 second persision。 const t = Math.floor(1630012381123 / 1000);const d = new date(t);
  • 我相信我可以将时间戳从 bigint 转换为给定 unix 纪元时间(毫秒)的数字。刚才想知道将日期格式化为所需模式的最佳方法是什么
  • 数字类型可以精确表示最多53位的所有整数。您的时间戳最多有 42 位,因此有足够的空间。

标签: javascript typescript date datetime bigint


【解决方案1】:

使用该时间戳,您可以只使用常规数字,它的大小为 15,而毫秒持续时间您只能使用大小 13。

以下是一些可能对您有用的示例代码:

const time = 1630017759934;
const timeInSeconds = Math.floor(time/1000);
const d = new date(timeInSeconds);
const dateFormatted = `${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`;

【讨论】:

  • 我对此进行了测试,但我相信它也能正常工作。 ``` 常量时间 = 1630017759934;常量 d = 新日期(数字(时间)); getMonth 和 getDay 是否基于零,这就是需要 +1 的原因?
  • @TeddyDong— 1630017759934 不是 ECMAScript BigInt,它只是一个数字,所以 new Date(time) 就足够了(返回 2021-08-26T22:42:39.934Z 的日期)。此外,cmets 中的代码包含在单个转义符中:`code`。 :-) 是的,月份和天一样是零索引,0 是星期日,1 是星期一,等等。
  • @TeddyDong:就像 RobG 所说的那样。这是否回答你的问题?如果是这样,请使用左侧的复选标记接受它作为答案。如果没有,您还有什么需要帮助的吗?
  • @RobG 所以 getDate 不是我需要的,因为它是星期几,有没有办法从 2021-08-26T22:42:39.934Z 获取实际日期 (26) 跨度>
  • @Wirde — 您还需要用前导零填充个位数的月份和日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2012-08-03
  • 2014-11-17
  • 2016-11-26
  • 2011-03-05
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多