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 相关文章推荐
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
Dec 22 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
全面了解函数声明与函数表达式、变量提升
Aug 09 Javascript
Bootstrap基本插件学习笔记之按钮(21)
Dec 08 Javascript
详解webpack打包vue时提取css
May 26 Javascript
React styled-components设置组件属性的方法
Aug 07 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
vue中实现上传文件给后台实例详解
Aug 22 Javascript
js实现的订阅发布者模式简单示例
Mar 14 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/05/05 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
在Windows8上的搭建Python和Django环境
2014/07/03 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
作文评语集锦大全
2014/04/23 职场文书
超市客服工作职责
2014/06/11 职场文书
班级活动总结格式
2014/08/30 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
2014年店长工作总结
2014/11/17 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python