node.js使用Moment.js js 时间计算方法示例小结

 更新时间:2023年05月08日 09:19:46   作者:囧小喵i  
这篇文章主要介绍了node.js使用Moment.js js 时间计算方法,结合实例形式分析了Moment.js js模块时间计算的常用操作技巧与相关注意事项,需要的朋友可以参考下

概述

moment 是一个使用非常方便的 Node.js 模块,可以帮助我们处理和格式化日期和时间。这里就来总结一下moment的常见用法。

首先是安装:

npm i moment

其次是引入:

const moment = require('moment'); //common.js 模式
//或者ES6模式: import moment from 'moment'

基本用法

Moment.js中文文档系列之八时间段(Durations)

  1. 创建时间段:duration()
  2. 人性化:humanize()
  3. 毫秒:milliseconds()
  4. 秒:seconds()
  5. 分:minutes()
  6. 小时:hours()
  7. 天:days()
  8. 月:months()
  9. 年:years()
  10. 增加时间:add()
  11. 减少时间:subtract()
  12. 单位转换:as()
  13. 取值:get()
  14. 转换为JSON:toJSON()
  15. 是否时间段:isDuration()

Moment.js中也有时间段对象。一个时间moment被定义为一个单点时刻,而时间段被定义为一个时间长度。

时间段没有定义开始和结束时间,它们是一种前后的关系。一个时间段更类似于“2小时”,而不是“今天下午的2点到4点之间”。

例如,一年可以被定义为366天、365天、365.25天、12个月或52周。计算两个时间之间的天或年时,使用moment#diff 比使用Durations更好。

1. 创建时间段:duration()

moment.duration(Number, String);
moment.duration(Number);
moment.duration(Object);
moment.duration(String);

创建一个时间段,通过moment.duration()方法并传入一个毫秒级的时间戳。

moment.duration(100); // 100 毫秒

如果你想在创建时间段时使用非毫秒级的单位,你可以像这样传入时间单位:

moment.duration(2, 'seconds');
moment.duration(2, 'minutes');
moment.duration(2, 'hours');
moment.duration(2, 'days');
moment.duration(2, 'weeks');
moment.duration(2, 'months');
moment.duration(2, 'years');

moment#addmoment#subtract方法中使用简写形式在这儿也同样适用。

KeyShorthand
yearsy
monthsM
weeksw
daysd
hoursh
minutesm
secondss
millisecondsms

moment#add一样,你可以按需要传入一个包含多个单位的对象。

moment.duration({
    seconds: 2,
    minutes: 2,
    hours: 2,
    days: 2,
    weeks: 2,
    months: 2,
    years: 2
});

格式是一个以冒号分隔的时、分、秒的字符串,如23:59:59。表示天的数字,使用点号分隔,如7.23:59:59。秒的部分还支持这样23:59:59.999 

moment.duration('23:59:59');
moment.duration('23:59:59.999');
moment.duration('7.23:59:59.999');
moment.duration('23:59');          //added in 2.3.0

2. 人性化:humanize()

moment.duration().humanize();

有时,你想像moment#from一样友好显示,但不想创建两个时间。

moment.duration(1, "minutes").humanize(); // a minute
moment.duration(2, "minutes").humanize(); // 2 minutes
moment.duration(24, "hours").humanize();  // a day

默认,其返回值是无后缀的。如果需要带后,可以传一个参数。

moment.duration(1, "minutes").humanize(true); // in a minute

如果是相对当前时间的前缀,可以传入一个负数。

moment.duration(-1, "minutes").humanize(true); // a minute ago

3. 毫秒:milliseconds()

moment.duration().milliseconds();
moment.duration().asMilliseconds();

获取一个数字表示的毫秒数,使用moment.duration().milliseconds(),其返回是一个0〜999之间的数字。

moment.duration(500).milliseconds(); // 500
moment.duration(1500).milliseconds(); // 500
moment.duration(15000).milliseconds(); // 0

如果要获取的是一个毫秒级的时间段长度,使用moment.duration().asMilliseconds()方法代替。

moment.duration(500).asMilliseconds(); // 500
moment.duration(1500).asMilliseconds(); // 1500
moment.duration(15000).asMilliseconds(); // 15000

4. 秒:seconds()

moment.duration().seconds();
moment.duration().asSeconds();

获取一个数字表示的秒数,使用moment.duration().seconds(),其返回是一个0〜59之间的数字。

moment.duration(500).seconds(); // 0
moment.duration(1500).seconds(); // 1
moment.duration(15000).seconds(); // 15

如果要获取的是一个秒级的时间段长度,使用moment.duration().asSeconds()方法代替。

moment.duration(500).asSeconds(); // 0.5
moment.duration(1500).asSeconds(); // 1.5
moment.duration(15000).asSeconds(); // 15

5. 分:minutes()

moment.duration().minutes();
moment.duration().asMinutes();

获取其它的时间段,moment.duration().minutes()可以获取分钟数(0〜59),moment.duration().asMinutes()可以获取表示分的长度。

6. 小时:hours()

moment.duration().hours();
moment.duration().asHours();

获取其它的时间段,moment.duration().hours()可以获取小时数(0〜23),moment.duration().asHours()可以获取表示小时的长度。

7. 天:days()

moment.duration().days();
moment.duration().asDays();

获取其它的时间段,moment.duration().days()可以获取天数(0〜23),moment.duration().asHours()可以获取表示天的长度。

8. 月:months()

moment.duration().months();
moment.duration().asMonths();

获取其它的时间段,moment.duration().months()可以获取月数(0〜11),moment.duration().asMonths()可以获取表示月的长度。

注意:一月的时间长度被定义为30天。

9. 年:years()

moment.duration().years();
moment.duration().asYears();

获取其它的时间段,moment.duration().years()可以获取年份,moment.duration().asYears()可以获取表示年的长度。

注意:一年的时间长度被定义为365天。

10. 增加时间:add()

moment.duration().add(Number, String);
moment.duration().add(Number);
moment.duration().add(Duration);
moment.duration().add(Object);

对原时间段增加时间。

在创建时间段时使用的简写形式的时间单位,在这里也同样适用。可以第二个参数中传入。

var a = moment.duration(1, 'd');
var b = moment.duration(2, 'd');
a.add(b).days(); // 3

11. 减少时间:subtract()

moment.duration().subtract(Number, String);
moment.duration().subtract(Number);
moment.duration().subtract(Duration);
moment.duration().subtract(Object);

对原时间段减少时间。

在创建时间段时使用的简写形式的时间单位,在这里也同样适用。可以第二个参数中传入。

var a = moment.duration(3, 'd');
var b = moment.duration(2, 'd');
a.subtract(b).days(); // 1

12. 单位转换:as()

moment.duration().as(String);

替换Duration#asX等方法,可以使用Duration#as('x')moment#add中使用的单位简写,在这里也同样适用。

duration.as('hours');
duration.as('minutes');
duration.as('seconds');
duration.as('milliseconds');

13. 取值:get()

moment.duration().get(String);

替换Duration#x等方法,可以使用Duration#get('x')moment#add中使用的单位简写,在这里也同样适用。

duration.get('hours');
duration.get('minutes');
duration.get('seconds');
duration.get('milliseconds');

14. 转换为JSON:toJSON()

moment.duration().toJSON();

将时间段对象序列化成JSON时,其会按ISO8601标准的字符串进行转换。

JSON.stringify({
    postDuration : moment.duration(5, 'm')
}); // '{"postDuration":"PT5M"}'

15. 是否时间段:isDuration()

moment.isDuration(obj);

检查是否是一个有效的时间段对象,使用moment.isDuration()

moment.isDuration() // false
moment.isDuration(new Date()) // false
moment.isDuration(moment()) // false
moment.isDuration(moment.duration()) // true
moment.isDuration(moment.duration(2, 'minutes')) // true

总结 :

moment.duration(now())    获取当前时间
moment.duration(now()).asHours()  //获取当前时间的小时时间段
asMilliseconds()//毫秒 
asSeconds()//秒
asMinutes()//分
asHours()//时
asDays()//天
asMonths()//月
asYears()//年

不加 as 的时候,是获取时间值

附:

一个使用 moment 模块计算时间差的示例:

const moment = require('moment');
const start = moment('2023-05-01 09:00:00', 'YYYY-MM-DD HH:mm:ss');
const end = moment();
const diff = end.diff(start);
console.log(moment.duration(diff).asMinutes()); // 输出两个时间之间间隔的分钟数

在这个示例中,首先引入了 moment 模块,并使用 moment() 方法创建了两个日期对象 startend。其中,start 表示起始日期和时间,使用 moment() 方法可以从标准的日期字符串或 JavaScript Date 对象创建日期对象。end 则表示当前时间,通过直接调用moment() 创建当前时间的日期对象。

然后,使用 diff() 方法计算 endstart 之间的时间差,将结果保存到变量 diff 中。接着,将 diff 传递给 duration() 方法,创建一个持续时间对象,并使用 asMinutes() 方法获取该持续时间以分钟为单位的值。

最后,将两个时间之间的间隔分钟数输出到控制台上。

相关文章

  • 如何用Node.js编写内存效率高的应用程序

    如何用Node.js编写内存效率高的应用程序

    这篇文章主要介绍了如何用Node.js编写内存效率高的应用程序,对Node.js感兴趣的同学,可以参考下
    2021-04-04
  • Node.js中使用计时器定时执行函数详解

    Node.js中使用计时器定时执行函数详解

    这篇文章主要介绍了Node.js中使用计时器定时执行函数详解,本文使用了Node.js中的setTimeout和setInterval函数,需要的朋友可以参考下
    2014-08-08
  • Node.js搭建Https服务过程详解

    Node.js搭建Https服务过程详解

    这篇文章主要为大家介绍了Node.js搭建Https服务过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 详解express与koa中间件模式对比

    详解express与koa中间件模式对比

    本篇文章主要介绍了详解express与koa中间件模式对比,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Node.js中fs模块实现配置文件的读写操作

    Node.js中fs模块实现配置文件的读写操作

    在Node.js中, fs模块提供了对文件系统的访问功能,我们可以利用它来实现配置文件的读取和写入操作,这篇文章主要介绍了Node.js中fs模块实现配置文件的读写,需要的朋友可以参考下
    2024-04-04
  • nodeJS进程管理器pm2的使用

    nodeJS进程管理器pm2的使用

    这篇文章主要介绍了nodeJS进程管理器pm2的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Express + Session 实现登录验证功能

    Express + Session 实现登录验证功能

    本文主要介绍在 Express 框架中,如何使用 Session 来实现用户登录身份验证。对express session实现登录验证相关知识,感兴趣的朋友一起看看吧
    2017-09-09
  • 详解使用Typescript开发node.js项目(简单的环境配置)

    详解使用Typescript开发node.js项目(简单的环境配置)

    本篇文章主要介绍了详解使用Typescript开发node.js项目(简单的环境配置),非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • Node.js中同步和异步编程的区别及使用方法

    Node.js中同步和异步编程的区别及使用方法

    在Node.js中,同步和异步编程是两种不同的处理方式。同步方式会阻塞程序的执行,而异步方式则不会。通过掌握它们的区别和使用方法,可以更好地实现程序的性能优化和功能扩展。同时,需要注意异步编程中的回调地狱问题,使用Promise可以更好地处理异步编程
    2023-05-05
  • Node.js制作简单聊天室

    Node.js制作简单聊天室

    这篇文章主要为大家详细介绍了Node.js制作简单聊天室的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01

最新评论