You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{formatRelative}from'date-fns'import{es,ru}from'date-fns/esm/locale'formatRelative(subDays(newDate(),3),newDate(),{locale: es})//=> "el viernes pasado a las 19:26"formatRelative(subDays(newDate(),3),newDate(),{locale: ru})//=> "в прошлую пятницу в 19:26"
moment:
moment.locale('fr');moment(1316116057189).fromNow();// il y a une heuremoment.locale('en');moment(1316116057189).fromNow();// an hour ago
moment.duration(1,"minutes").locale("en").humanize();// a minutemoment.duration(1,"minutes").locale("fr").humanize();// une minutemoment.duration(1,"minutes").locale("es").humanize();// un minuto
now.js是什么
now.js
是一个javascript的时间操作小工具,类似date-fns和moment。长啥样
简单的把示例放这,更多用法请到github去发现。
为什么要写这个库
因为学习underscore源码的过程中,感觉无聊。想写个库调剂一下,当做学习的机会。
我是照着
underscore
源码一个个commit敲的.代码放在这里,刚看了一眼,有668次commit,两个月,敲到了1.4.3版本,可能还没到一半。敲久了有点无聊。想动手写一个库作为调剂。碰巧之前做防健忘短信提醒的时候是用go写的后台,用了gorm,在作者
jinzhu
的github主页上发现了now,是一个go的时间帮助库,觉得很有意思。clone之,学之。偷了
now
的思想。造一个javascript版的就显得很容易。很快我就写完了除了Parse
和MustParse
之外的所有方法。跟原库对比一下。觉得now.js就是个玩具。这不怪我,javascript对时间处理的支持远不如go。比如go原生支持format
、字符串解析成时间以及Duration
等等。想着加上
format
。该怎么去写?立马就想到的方法是平时经常写的根据不同条件做字符串拼接。确实是个方法。但得多少switch case才能涵盖所有情况,想想都可怕。显然这是最蠢也是工作量最大的方法。不会,那就借鉴别人的。github上发现了date-fns和moment,支持i18n国际化。
date-fns:
moment:
我的审美告诉我应该选择moment,调用一次locale(),这之后的format都是基于该locale的。当然它也还支持每次单独指定locale的:
进一步学习发现moment的format和i18n国际化高度耦合。要用它的i18n意味着基本上也得用它的format。当然i18n也不是核心的moment库作者写的,他们也精通不了那么多国家的语言,那都是github上许许多多人贡献的。开源就有这好处。看下LICENCE是MIT的,代码可用,抄。
now.js也是MIT协议的,负罪感少了点(其实MIT协议是相当宽松的,就算你拿它代码去商业化也是没有问题的)。况且我写库的主要目的是为了学习。
开干!虽说是抄,毕竟代码要整合到我的库,直接复制粘贴是不行的。所有的代码细节未必都需要全知道,但看懂整体运行的逻辑是必须的,下点功夫,整合成功,开源。
思维脑图
moment:

当然,moment的东西不止上图这些,我只取了一部分来画。

now.js:
now.js的Duration和moment 5B9C 不一样,现在还不支持单独使用,只是给内部方法
elapse
使用,以后可能会支持单独使用。对比
new Date(args)
相同的args
参数类型。不过format
应该都基本上和moment的一样,不过测试用例现在还没有写太全,如果谁用了并且发现bug,可以到github去提issues。不胜感激。结语
这个库不是我一个人写的,是许多开源工作者共同完成的。感谢moment的所有开源贡献者,我从中学习了很多东西。后续还会继续研究moment的代码细节,偷偷它的思想。
写代码什么最重要?思想最重要!
The text was updated successfully, but these errors were encountered: