JavaScript日期库date-fn.js使用方法解析


Posted in Javascript onSeptember 09, 2020

用JavaScript处理日期并不容易。因此,如果您查看大多数应用程序的 package.json 文件,通常会在其中找到像 Moment.js 这样的库。

它对开发人员对解析/格式化/计算日期而言不再那么艰巨,但 Moment.js 是最早臭名昭著的库之一。

但是您知道一个名为 date-fns 的库吗?

JavaScript日期库date-fn.js使用方法解析

date-fn官网

date-fns 通常被认为是 Moment.js 的一个有价值的替代品。不仅因为它提供了相同的特性集,而且它还吸引了函数式程序员。

安装 date-fns

您可以使用npm/yarn安装date-fns,官方网站:https://date-fns.org/

# Using npm
$ npm install date-fns

# Or using yarn
$ yarn add date-fns

格式化Date

格式化日期是 Moment.js/date-fns 之类的库的基本功能,这是因为原生JavaScript没有简单的方法来处理此问题。

date-fns使用类似于Moment.js的字符串模式:

const format = require('date-fns/format');
const stPattysDay = new Date('2020/03/17');
const formattedDate1 = format(stPattysDay, 'MM/dd/yyyy');
const formattedDate2 = format(stPattysDay, 'MMMM dd, yyyy');

console.log(formattedDate1);
// => "03/17/2020"

console.log(formattedDate2);
// => "March 17, 2020"

就这么简单!有很多方法可以格式化日期,使它们看起来与您希望的完全一样。

加/减日期

现在我们可以格式化日期了,那么对日期执行加减法呢?有几个函数可以做到这一点:

  • addDays - 加天
  • subDays - 减天
  • addWeeks - 加周
  • subWeeks - 减周
  • addMonths - 加月
  • subMonths - 减月

在下面的例子中,我们在一个指定的日期上加上1年:

const format = require('date-fns/format');
const addYears = require('date-fns/addYears');

const stPattysDay = new Date('2020/03/17');
const stPattysDayNextYear = addYears(stPattysDay, 1);
const formattedDate = format(stPattysDayNextYear, 'MMMM dd, yyyy');

console.log(formattedDate);
// => "March 17, 2021"

本地化和国际化

格式化很简单,但是locale呢?我们知道用户将从世界各地访问您的网站,我们不想假设他们说我们的母语。

为此,我们可以导入特定的语言环境插件:

const format = require('date-fns/format');
const russianLocale = require('date-fns/locale/ru');

const stPattysDay = new Date('2020/03/17');
const formattedDate = format(stPattysDay, 'MMMM dd, yyyy', { locale: russianLocale });

console.log(formattedDate);
// => "марта 17, 2020"

国际化支持也很好

JavaScript日期库date-fn.js使用方法解析

比较两个日期

对于一个日期操作库来说,计算两个日期之间的差的能力是非常重要的。date-fns提供了几个函数来计算这个值。

例如,我们可以计算从1月1日到圣诞节的天数(以及“营业日”!):

const format = require('date-fns/format');
const addYears = require('date-fns/addYears');
const differenceInDays = require('date-fns/differenceInDays');
const differenceInBusinessDays = require('date-fns/differenceInBusinessDays')

const startDate = new Date('2020/01/01');
const endDate = new Date('2020/12/24');
const daysBetween = differenceInDays(endDate, startDate);
const workdaysBetween = differenceInBusinessDays(endDate, startDate);

console.log(daysBetween);
// => 358

console.log(workdaysBetween);
// => 256

date-fns是轻量级的

用Moment.js的最大弊端之一是,它的API无法导入单个函数。

const moment = require('moment');
const formattedDate = moment(new Date()).format('MM/DD/YYYY');

console.log(formattedDate);
// => "03/17/2020"

使用date-fns,您只需获取所需的特定功能(与Lodash相似):

const format = require('date-fns/format');
const formattedDate = format(new Date(), 'MM/dd/yyyy');

console.log(formattedDate);
// => "03/17/2020"

这使得date-fns的依赖性比Moment.js小得多,有关Moment.js与date-fns的捆绑包大小,请参见下图:

JavaScript日期库date-fn.js使用方法解析

Source: BundlePhobia

总结

date-fns目前似乎比moment .js得到了更多的开发工作,因此,它确实维护得很好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
javascript时间函数基础介绍
Mar 28 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
javascript实现避免页面按钮重复提交
Jan 08 Javascript
javascript用函数实现对象的方法
May 14 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
React Native 图片查看组件的方法
Mar 01 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
Apr 26 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
js实现简单抽奖功能
Nov 24 #Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 #Javascript
Vue路由 重定向和别名的区别说明
Sep 09 #Javascript
JavaScript常用8种数组去重代码实例
Sep 09 #Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 #Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 #jQuery
js实现右键弹出自定义菜单
Sep 08 #Javascript
You might like
PHPShop存在多个安全漏洞
2006/10/09 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
php通过session防url攻击方法
2014/12/10 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
python的常见命令注入威胁
2013/02/18 Python
django中的setting最佳配置小结
2017/11/21 Python
对python sklearn one-hot编码详解
2018/07/10 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
八一演出活动方案
2014/02/03 职场文书
趣味活动策划方案
2014/02/08 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
入门学习Go的基本语法
2021/07/07 Golang
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers