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的原型继承
Jul 25 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
浏览器中url存储的JavaScript实现
Jul 07 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
Sep 19 Javascript
js获取图片宽高的方法
Nov 25 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
canvas实现图像放大镜
Feb 06 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
基于mpvue的小程序项目搭建的步骤
May 22 Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 Javascript
Angular脚手架开发的实现步骤
Apr 09 Javascript
关于vue的列表图片选中打钩操作
Sep 09 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 magic quotes的详解
2013/06/17 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
详解js异步文件加载器
2016/01/24 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
4s店机修工岗位职责
2013/12/20 职场文书
超市5.1促销活动
2014/01/15 职场文书
市场拓展计划书
2014/05/03 职场文书
激励员工的口号
2014/06/16 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书