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 相关文章推荐
javascript 关于# 和 void的区别分析
Oct 26 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
Jquery getJSON方法详细分析
Dec 26 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
Dec 07 Javascript
vue获取dom元素注意事项
Dec 28 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
Jan 13 Vue.js
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中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP读取Excel类文件
2017/05/15 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
图文详解WinPE下安装Python
2016/05/17 Python
python自动翻译实现方法
2016/05/28 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
大学生简单自荐信
2013/11/10 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
高中生操行评语
2014/04/25 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
销售助理岗位职责
2015/02/11 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
人力资源部工作计划
2019/05/14 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
JS封装cavans多种滤镜组件
2022/02/15 Javascript