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面向对象编程
Nov 15 Javascript
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
.NET微信公众号开发之创建自定义菜单
Jul 16 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
微信小程序 加载 app-service.js 错误解决方法
Oct 12 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 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中的字符编码转换函数用法示例
2014/10/20 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
javascript判断office版本示例
2014/04/11 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
django celery redis使用具体实践
2019/04/08 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
openCV提取图像中的矩形区域
2020/07/21 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
中学家长会邀请函
2014/01/17 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
微信营销策划方案
2014/02/24 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
酒店开业策划方案
2014/06/02 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
实习生矿工检讨书
2014/10/13 职场文书
工作表现证明
2015/06/15 职场文书