将 JavaScript UTC 日期时间转换为本地 YYYY-MM-DD

Convert JavaScript UTC datetime to local YYYY-MM-DD

我从数据库中获取 UTC 格式的 ISO-8601 日期时间字符串数据,然后我需要将其转换为 YYYY-MM-DD 格式的本地日期字符串。

此代码有效,但我想知道是否有更好的方法...

const zeroPad = n => n < 10 ? '0' + n : n
const d = new Date('2021-07-06T01:00:00.000Z') // UTC 1 AM
const month = zeroPad(d() + 1)
const date = zeroPad(d())
const result = `${d.getFullYear()}-${month}-${date}`
console.log(result); // US/Eastern 8 PM - date is 1 day earlier

感觉有点笨拙,但我正在努力避免外部库的开销。

有什么想法吗?

第二行多余。 Date 对象本质上是基于 UTC 的。直到每次调用 getMonthgetDategetFullYear 时,才会真正转换为浏览器的本地时区。因此,您不需要两次单独调用 Date 构造函数。除此之外,你的代码没问题。

如果它看起来有点笨拙,那是可以预料的。 Temporal 会使它变得更好,但在它可用之前,您可以通过这种方式或使用库来实现。

顺便说一句,您的评论不正确。对于英国夏令时,伦敦在 7 月是 UTC+1,因此对于基于 UTC 的时间戳,伦敦是凌晨 2 点。

您可以尝试 toLocaleDateString,因为您所追求的格式是由 en-CA 语言(也许还有其他语言)给出的:

console.log(
  new Date('2021-07-06T01:00:00.000Z').toLocaleDateString('en-CA')
);

任何 toLocale* 方法的警告是,您不能保证所有实现都将 return 相同的格式,并且可能回退到某些依赖于实现的格式。所以如果这很重要,请不要使用它。