timeago.js
Github地址:https://github.com/hustcc/timeago.js
timeago.js 是一个非常简洁、轻量级、小于
2kb
的很简洁的Javascript库,用来将datetime时间转化成类似于*** 时间前
的描述字符串,例如:“3小时前”。
- 本地化支持,默认自带中文和英文语言,基本够用;
- 之前 xxx 时间前、xxx 时间后;
- 支持npm方式和浏览器script方式;
- 测试用例完善,执行良好;
关于Python的版本,可以看 timeago.
刚刚
12秒前
3分钟前
2小时前
24天前
6月前
3年前
12秒后
3分钟后
2小时后
24天后
6月后
3年后
使用方法
** 1. 下载 timeago.js **
npm install timeago.js
** 2. 引入 timeago.js **
使用import引入,然后可以得到一个全局变量: timeago
.
import timeago from 'timeago.js';
// 或者
var timeago = require("timeago.js");
或者直接通过 script
标签引入到html文件中.
<script src="dist/timeago.min.js"></script>
** 3. 使用 timeago
类 **
var timeago = timeago();
timeago.format('2016-06-12')
高级特性使用
** 1. 本地化 **
默认的语言是英文 en
, 这个库自带语言有 en
and zh_CN
(英文和中文).
var timeago = timeago();
timeago.format('2016-06-12', 'zh_CN');
** 2. 注册本地语言 **
你可以自己自定义注册 register
你自己的语言. 如下所示,所有的键值都必须存在,不然可能会出错. e.g.
// 本地化的字典样式
var test_local_dict = {
'JUST_NOW': ["just now", "a while"],
'SECOND_AGO': ["%s seconds ago", "in %s seconds"],
'A_MINUTE_AGO': ["1 minute ago", "in 1 minute"],
'MINUTES_AGO': ["%s minutes ago", "in %s minutes"],
'AN_HOUR_AGO': ["1 hour ago", "in 1 hour"],
'HOURS_AGO': ["%s hours ago", "in %s hours"],
'A_DAY_AGO': ["1 day ago", "in 1 day"],
'DAYS_AGO': ["%s days ago", "in %s days"],
'A_MONTH_AGO': ["1 month ago", "in 1 month"],
'MONTHS_AGO': ["%s months ago", "in %s months"],
'A_YEAR_AGO': ["1 year ago", "in 1 year"],
'YEARS_AGO': ["%s years ago", "in %s years"]
}
var timeago = timeago();
timeago.register('test_local', test_local_dict);
timeago.format('2016-06-12', 'test_local');
** 3. 设置相对日期 **
timeago
默认是相对于当前事件的,当然也可以自己设置相对的时间,如下所示:
var timeago = timeago('2016-06-10 12:12:12'); // 在这里设置相对时间
timeago.format('2016-06-12', 'zh_CN');
** 4. 格式化时间戳 **
timeago().format(new Date().getTime() - 11 * 1000 * 60 * 60); // will get '11 hours ago'
TODO
- 一个网站的展示页面
LICENSE
MIT
补充一点
这个repo是因为自己在多个项目中使用到,确实如评论所说,写一个可以用的timeago方法差不多10行,但是多个项目使用,还是提出npm比较好一些,统一维护,不然每个项目都需要copy一份。
另外,timeago.js发布npm社区的目地首先是方便自己的项目维护,但是毕竟npm是开放的,所以做了完善的测试,相对比较完善的功能,以免坑道一些用户。
至于评论中的鄙视、鄙夷等,大家均可忽略,不要伤了和气,项目本身也并不是给他们使用的
。
我问一下,nodeclub的代码写的好吗? 如果不好,为什么不给一个更好的啊。 我以为你们的态度是一致的,如果不一致,不就是舔菊吗?
按理说以你们这么高的要求,应该将nodeclub的代码批评的体无完肤才对。 不过我看到了你们的宽容,我为什么总觉得好像那里不对呢?
ban不ban无所谓。权力属于某些管理员。
@calidion 没说不好,好代码也不一定适合别人用。。上面的代码我看了,功能性的代码也就几十行,不算太难而且不是特别常用的一个功能搞的还兼容前后端,还整个多语言,我评论一句得不偿失就得写一个更好的?写不出来更好的我是不是就得跪添?
你说不好,也是没有关系的。 关键在于你好与坏的标准没有。 如果你有好与不好的标准,那么按你的标准来,这是不好的,那是好的。 但是我似乎没有见到这种标准。 同样的东西,一个说不好,一个说好。 这就是你的问题。
@zouzhenxing @eyblog 自己用起来挺好的,支持相对时间、locale、时间string和Date,10行真的完成不了。 10行勉强可以完成:
- 支持Date类型
- 一种语言
但是这样的话,其实就是每个项目你都需要写一遍,如果需要支持en,获取还需要再写一遍。如果一个开源项目评价的标准是代码行数,那么leftpad也许是最该被处理掉的。
js社区之所以近几年异常活跃,和模块化关小不小吧~~~
@solee0524 moment和jq.timeago我都调用使用过,moment有很多date操作的方法,项目中用不到,jq.timeago依赖jq,而且直接处理到html标签,包括自动实时计算,个人感觉耦合太重。
所以造了这个轮子,专注于timeago