Date-fns 格式的距离不是用正确的词

Posted

技术标签:

【中文标题】Date-fns 格式的距离不是用正确的词【英文标题】:Date-fns format distance is not in correct words 【发布时间】:2021-12-12 10:23:05 【问题描述】:

我遇到了 UI 问题,希望将时间戳距离显示为 3 hours ago4 hours ago 等。来自服务器的时间戳具有名为 createdAt 的属性,该属性具有以下值。

createdAt: "2021-10-27T05:24:37.642Z"

为了解决这个问题,我使用了像 date-fns v2.25.0 内置函数 formatDistance 这样的库。

import  formatDistance from 'date-fns';

const timestamp = createdAt ? new Date(createdAt) : '';
console.log(formatDistance(Date.now(), timestamp, addSuffix: true));
    

但用下面的话却是在回馈距离

in about 3 hours
in about 4 hours

而不是

3 hours ago
4 hours ago

我做错了什么?如果您知道任何其他好的图书馆,请您分享。

【问题讨论】:

反转formatDistance中的两个参数 如果使用moment包moment('2021-10-27T05:24:37.642Z').fromNow(); @Evert 谢谢它现在工作。您可以根据您的评论创建答案。所以我接受。 【参考方案1】:

您可以使用任何其他流行的包,例如moment,我相信它有更多的自定义配置,但是如果您想使用这个包,而不必更改formatDistance 函数,它会更容易更改结果字符串,如:

import  formatDistance  from "date-fns";

const createdAt = "2020-08-27T08:24:37.642Z";
const timestamp = createdAt ? new Date(createdAt) : "";
const distance = formatDistance(Date.now(), timestamp, addSuffix: true );

console.log(distance.substring(distance.indexOf(distance.match(/\d+/g))));

// => 2 hours ago

【讨论】:

不要建议新代码的时刻。它正在逐步淘汰。 OP 的问题只是参数被颠倒了。【参考方案2】:

颠倒参数:

console.log(formatDistance(timestamp, Date.now(), addSuffix: true));

【讨论】:

以上是关于Date-fns 格式的距离不是用正确的词的主要内容,如果未能解决你的问题,请参考以下文章

Date-fns 返回不正确的日期

时刻 vs date-fns 语言环境日期格式

使用 date-fns 格式化持续时间(从 seconds 开始)

使用 date-fns 将日期解析为 UTC 的正确方法

如何使用 date-fns 格式化日期?

使用 date-fns 解析多种格式