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 相关文章推荐
JS 建立对象的方法
Apr 21 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
vue 实现特定条件下绑定事件
Nov 09 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
微信小程序实现弹框效果
May 26 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
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
js玩一玩WSH吧
2007/02/23 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
公司财务总监岗位职责
2013/12/14 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
不假外出检讨书
2014/01/27 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
西柏坡观后感
2015/06/08 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang