使用 ISO-8601 格式的 date-fns 获取当前日期
Posted
技术标签:
【中文标题】使用 ISO-8601 格式的 date-fns 获取当前日期【英文标题】:Get the current date using date-fns in ISO-8601 format 【发布时间】:2019-02-19 09:58:47 【问题描述】:我想使用 date-fns lib 获取从当天开始的最后一小时:分钟:秒的 ISO-8601 格式:
我正在使用:
endOfDay(new Date());
Fri Sep 14 2018 23:59:59 GMT-0300
所以添加 toISOString() 以获取 ISO 格式:
endOfDay(new Date()).toISOString()
结果:
2018-09-15T02:59:59.999Z
当我需要时:
2018-09-14T23:59:59.999Z
【问题讨论】:
我相信这是因为您的日期是 UTC。也许尝试计算时区偏移量,并将其应用于您的日期会起作用。例如,您是 GMT-0300;比世界标准时间早 3 小时。要获得您所在时区的时间,您需要返回三个小时。虽然,这一切都是基于 10 分钟的研究。我不是日期格式专家:) 【参考方案1】:2018-09-14T23:59:59.999Z
不是endOfDay(new Date());
计算的一天结束。时间提前了 3 小时。 “Z”表示 UTC,您的本地时区与 UTC -0300
有偏移。
通过执行endOfDay
,您将获得一个日期值,您可以将其用于与其他日期值进行比较和其他计算。这是一个带有本地时区时间的完整日期。
您想在格式化字符串中保留同一天数吗?您可以将日期格式化为您当地时区的 ISO 8601 字符串:
format(endOfDay(new Date()), 'yyyy-MM-DD[T]HH:mm:ssZZ')
// Prints "2018-09-14T23:59:59.999-0300" in Brazil (BRT)
您想以与今天相同的 UTC 数字结束一天吗?如果您忽略与其他日期相关的一天的实际结束,您可以将“一天的最后一秒”与“Z”连接起来:
format(new Date(), 'yyyy-MM-DD') + 'T23:59:59.999Z'
// Prints "2018-09-14T23:59:59.999Z" anywhere on Earth
注意:如果您使用 date-fns 1.x,请将上述模式中的 yyyy
替换为 YYYY
。另请参阅下面的 cmets。
【讨论】:
RangeError: 使用yyyy
而不是YYYY
(在YYYY-MM-DD[T]HH:mm:ssZZ
中)格式化年份...
感谢您提及这一点,@shs!这似乎是 date-fns 2.x 中的一个重大变化,其中 Y
became the week-numbering year,而日历年更改为 y
。 Y
表示日历年 in date-fns 1.x。以上是关于使用 ISO-8601 格式的 date-fns 获取当前日期的主要内容,如果未能解决你的问题,请参考以下文章