返回

JS 日期操作技巧大放送:助你轻松搞定时间难题

前端

前言

在日常的开发过程中,日期操作是非常常见,也是经常遇到的需求。在 JS 中,日期操作也有很多种方式。本篇文章将简单介绍一下常见的几种时间处理的方式,扩展包。并从一个简单的实际应用场景来分别看下,具体怎么用代码去实现。

JS 日期对象

日期获取

在 JS 中,我们可以使用 new Date() 来创建一个日期对象。这个对象包含了当前的日期和时间信息。

const now = new Date();
console.log(now); // 2023-03-08T06:30:00.000Z

日期格式化

我们可以使用 toLocaleDateString()toLocaleTimeString() 方法来格式化日期对象。这两个方法可以将日期对象转换成字符串,并使用指定的格式来显示。

const now = new Date();
const dateString = now.toLocaleDateString();
const timeString = now.toLocaleTimeString();

console.log(dateString); // 2023-03-08
console.log(timeString); // 06:30:00

日期比较

我们可以使用 ><>=<=== 运算符来比较两个日期对象。这些运算符将返回一个布尔值,表示两个日期是否相等或哪个日期更大。

const date1 = new Date('2023-03-08');
const date2 = new Date('2023-03-09');

console.log(date1 > date2); // false
console.log(date1 < date2); // true

日期相加减

我们可以使用 setDate()setMonth()setYear() 方法来对日期对象进行加减操作。这些方法可以将日期对象中的日期、月份或年份进行加减。

const date = new Date();

// 加一天
date.setDate(date.getDate() + 1);

// 加一个月
date.setMonth(date.getMonth() + 1);

// 加一年
date.setYear(date.getFullYear() + 1);

console.log(date); // 2023-03-09T06:30:00.000Z

日期扩展包

除了上述的内置方法外,我们还可以使用一些日期扩展包来帮助我们进行日期操作。这些扩展包可以提供一些更高级的日期操作功能。

moment.js

moment.js 是一个非常流行的日期扩展包。它提供了丰富的日期操作功能,包括日期格式化、日期比较、日期相加减、日期间隔计算等等。

const moment = require('moment');

const date = moment('2023-03-08');

// 格式化日期
const dateString = date.format('YYYY-MM-DD');

// 比较日期
const isSameDay = moment().isSame(date, 'day');

// 相加减日期
const nextWeek = moment().add(1, 'week');

console.log(dateString); // 2023-03-08
console.log(isSameDay); // false
console.log(nextWeek.format('YYYY-MM-DD')); // 2023-03-15

date-fns

date-fns 是另一个非常流行的日期扩展包。它也提供了丰富的日期操作功能,包括日期格式化、日期比较、日期相加减、日期间隔计算等等。

const dateFns = require('date-fns');

const date = dateFns.parse('2023-03-08');

// 格式化日期
const dateString = dateFns.format(date, 'YYYY-MM-DD');

// 比较日期
const isSameDay = dateFns.isSameDay(date, new Date());

// 相加减日期
const nextWeek = dateFns.addDays(date, 7);

console.log(dateString); // 2023-03-08
console.log(isSameDay); // false
console.log(dateFns.format(nextWeek, 'YYYY-MM-DD')); // 2023-03-15

实际应用场景

计算两个日期之间的天数

const date1 = new Date('2023-03-08');
const date2 = new Date('2023-03-15');

const diffDays = Math.floor((date2 - date1) / (1000 * 60 * 60 * 24));

console.log(diffDays); // 7

计算两个日期之间的工作日天数

const date1 = new Date('2023-03-08');
const date2 = new Date('2023-03-15');

const diffDays = Math.floor((date2 - date1) / (1000 * 60 * 60 * 24));

// 计算周末天数
const weekendDays = Math.floor(diffDays / 7) * 2;

// 计算工作日天数
const workDays = diffDays - weekendDays;

console.log(workDays); // 5

结语

在本文中,我们介绍了 JS 中日期操作的几种常见方式,以及一些常用的日期扩展包。希望这些技巧能够帮助您轻松搞定各种日期处理难题。