用于人性化相对日期格式的 Javascript 库 [英] Javascript library for human-friendly relative date formatting

查看:27
本文介绍了用于人性化相对日期格式的 Javascript 库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想以人性化的格式显示与当前日期相关的一些日期.

I'd like to display some dates as relative to the current date in a human-friendly format.

人性化的相对日期示例:

Examples of human-friendly relative dates:

  • 10 秒前
  • 20 分钟后
  • 1 天前
  • 5 周前
  • 2 个月前

基本上忠实地保留最高数量级(并且优先选择仅在超过其中 2 个单位时上调单位 - 5 周而不是 1 个月).

Basically faithfully preserving the highest order of magnitude (and by preference, only shifting up units when passing 2 of those units - 5 weeks instead of 1 month).

虽然我可以和一个控制更少、日期更友好的图书馆一起生活,比如:

Though I could live with a library that had less control and even more friendly dates like:

  • 昨天
  • 明天
  • 上周
  • 几分钟前
  • 几个小时后

有什么流行的库吗?

推荐答案

自从我写了这个答案,一个众所周知的可用库是 moment.js.

Since I wrote this answer, a well known library available is moment.js.

可用的库,但自己实现它是微不足道的.只需使用一些条件即可.

There are libraries available, but it is trivial to implement it yourself. Just use a handful of conditions.

假设 date 是您要进行比较的时间的实例化 Date 对象.

Assume date is an instantiated Date object for the time you want to make a comparison against.

// Make a fuzzy time
var delta = Math.round((+new Date - date) / 1000);

var minute = 60,
    hour = minute * 60,
    day = hour * 24,
    week = day * 7;

var fuzzy;

if (delta < 30) {
    fuzzy = 'just then.';
} else if (delta < minute) {
    fuzzy = delta + ' seconds ago.';
} else if (delta < 2 * minute) {
    fuzzy = 'a minute ago.'
} else if (delta < hour) {
    fuzzy = Math.floor(delta / minute) + ' minutes ago.';
} else if (Math.floor(delta / hour) == 1) {
    fuzzy = '1 hour ago.'
} else if (delta < day) {
    fuzzy = Math.floor(delta / hour) + ' hours ago.';
} else if (delta < day * 2) {
    fuzzy = 'yesterday';
}

您需要对此进行调整以处理未来的日期.

You would need to adapt this to handle future dates.

这篇关于用于人性化相对日期格式的 Javascript 库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆