首页 > 解决方案 > 使用 ISO-8601 格式的 date-fns 获取当前日期

问题描述

我想使用 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

标签: javascripttypescriptdate-fns

解决方案


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另请参阅下面的评论。


推荐阅读