JavaScript中对new Date()的奇妙操作

一、获取两个日期时间之间的总天数

(1)使用第三方库momentjs

可以使用 Moment.js 的diff()方法来获取两个日期的时间差,然后通过给它传递 'days' 单位参数来获取相隔的天数。下面是一段示例代码:

ini 复制代码
const start = moment('2022-01-02');
const end = moment('2022-10-05');
​
const days = end.diff(start, 'days');
​
console.log(days); // 输出 276

在上述代码中,我们将开始和结束日期都转换成 Moment.js 对象,并使用 diff() 方法计算它们之间相隔的天数,最后将结果打印出来。

需要注意的是,diff() 方法返回的是一个时间差的绝对值,因此无论哪个参数在前,在计算天数方面得到的结果都是一样的。如果要考虑开始时间和结束时间的顺序,请根据具体需求自行调整。

(2)原生js

可以使用原生 JavaScript 来计算两个日期之间的天数差。通过将两个日期对象转换为时间戳,然后将其相减并将结果除以一天的毫秒数 (86400000),即可得到它们之间相差的天数。下面是一段示例代码:

ini 复制代码
const startDate = new Date('2022-01-02');
const endDate = new Date('2022-10-05');
​
const timeDiff = endDate.getTime() - startDate.getTime();
const dayDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); 
​
console.log(dayDiff); // 输出 276

在上述代码中,我们首先创建了开始和结束日期对象,然后将它们转换成时间戳,并计算它们之间相差的毫秒数。最后再将毫秒数转换成天数, 这里使用了 Math.floor() 函数来向下取整,确保最终获取到的值为一个整数。

二、获取这两个时间间隔的完整月份

可以借助 Moment.js 提供的 month()isSameOrBefore()add() 方法来获取两个日期之间的全部月份

下面是一段示例代码:

vbnet 复制代码
function getMonthsBetween(start, end) {
  const result = [];
  let current = moment(start).startOf('month');
  const stop = moment(end).endOf('month');
  
  while (current.isSameOrBefore(stop)) {
    result.push(current.format('YYYY-MM'));
    current.add(1, 'months');
  }
  
  return result;
}
​
// 示例输入:2022-03 和 2023-05
const start = '2022-03';
const end = '2023-05';
​
const months = getMonthsBetween(start, end);
console.log(months); // 输出 ["2022-03", "2022-04", "2022-05", "2022-06", "2022-07", "2022-08", "2022-09", "2022-10", "2022-11", "2022-12", "2023-01", "2023-02", "2023-03", "2023-04", "2023-05"]

在上述代码中,getMonthsBetween 函数接收两个日期字符串,将它们转换为 Moment.js 对象,并使用 while 循环遍历两个日期间的所有月份。每次循环中,使用 format() 方法将当前月份格式化为字符串形式(如 'YYYY-MM'),并将其添加到数组中。接着使用 add() 方法更新当前时间至下一个月初,直到超过截止时间为止。最后返回包含所有月份的数组。

三、获取当前日期所在季度

可以使用 JavaScript 中的 Date 对象和 Math 对象来获取当前日期所在季度。

具体实现方法如下:

javascript 复制代码
// 获取当前月份
var month = new Date().getMonth();

// 获取当前季度
var quarter = Math.floor(month / 3) + 1;

console.log("当前季度为:" + quarter);

其中,new Date().getMonth() 获取当前月份,由于季度是以3个月为一个周期,因此需要用 Math.floor(month / 3) 计算出当前是第几个季度,再加上 1 即为当前季度的编号。

以上代码输出的结果,以 2023 年 4 月 23 日为例,输出的结果为:当前季度为:2。

四、获取当前日期是当前季度的第几个月

可以使用 JavaScript 中的 Date 对象和 Math 对象来获取当前日期是当前季度的第几个月。

具体实现方法如下:

javascript 复制代码
// 获取当前月份
var month = new Date().getMonth();

// 获取当前季度的第一个月份
var startMonth = (Math.floor(month / 3)) * 3;

// 获取当前日期是当前季度的第几个月
var currentQuarterMonth = month - startMonth + 1;

console.log("当前季度的第" + currentQuarterMonth + "个月");

其中,new Date().getMonth() 获取当前月份,由于季度是以 3 个月为一个周期,因此需要用 Math.floor(month / 3) 来计算当前是第几个季度的第一个月,再用当前月份减去第一个月份,再加 1 即为当前季度的第几个月。

以上代码输出的结果,以 2023 年 4 月 23 日为例,输出的结果为:当前季度的第2个月。

相关推荐
尽兴-1 天前
[特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
前端·nginx·https·跨域·cors·chrom
JIngJaneIL1 天前
助农惠农服务平台|助农服务系统|基于SprinBoot+vue的助农服务系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·助农惠农服务平台
云外天ノ☼1 天前
待办事项全栈实现:Vue3 + Node.js (Koa) + MySQL深度整合,构建生产级任务管理系统的技术实践
前端·数据库·vue.js·mysql·vue3·koa·jwt认证
一位搞嵌入式的 genius1 天前
前端实战开发(三):Vue+Pinia中三大核心问题解决方案!!!
前端·javascript·vue.js·前端实战
塞纳河畔的歌1 天前
保姆级教程 | 麒麟系统安装Edge浏览器
前端·edge
多睡觉觉1 天前
数据字典:从"猜谜游戏"到"优雅编程"的奇幻之旅
前端
嗝屁小孩纸1 天前
开发集成热门小游戏(vue+js)
前端·javascript·vue.js
赛博切图仔1 天前
深入理解 package.json:前端项目的 “身份证“
前端·javascript
UIUV1 天前
JavaScript 学习笔记:深入理解 map() 方法与面向对象特性
前端·javascript·代码规范
太平洋月光1 天前
MJML邮件如何随宽度变化动态切换有几列📮
前端·css