在 JavaScript 中从日期中减去小时数

从日期中减去小时数:

  1. 使用 getHours() 方法获取特定日期的小时数。
  2. 使用 setHours() 方法设置日期的小时数。
  3. setHours 方法将小时作为参数并设置日期的值。
function subtractHours(numOfHours, date = new Date()) {
  date.setHours(date.getHours() - numOfHours);

  return date;
}

// 👇️ Subtract 1 hour from the current date
const result = subtractHours(1);

// 👇️ Subtract 2 hours from another date
const date = new Date('2022-04-27T08:30:10.820');

// 👇️ Wed Apr 27 2022 06:30:10
console.log(subtractHours(2, date));

我们创建了一个可重用的函数,它获取小时数和一个 Date 对象,然后从日期中减去小时数。

如果没有为函数提供 Date 对象,则它使用当前日期。

getHours() 方法返回一个介于 0 和 23 之间的数字,该数字根据本地时间表示给定日期的小时。

setHours() 方法将表示小时的数字作为参数并设置日期的值。

如果从日期中减去 X 小时会将我们推到前一天、前一个月或前一年,JavaScript Date 对象会自动负责调整月中的日期、月份和年份。

const date = new Date('2022-04-27T01:30:10.820');

date.setHours(date.getHours() - 3);

console.log(date); // 👉️ Tue Apr 26 2022 22:30:10

在示例中,从日期中减去 3 小时会自动调整月份中的日期。

请注意,setHours 方法会改变调用它的 Date 对象。 如果我们不想就地更改日期,请在调用该方法之前创建一个副本。

function subtractHours(numOfHours, date = new Date()) {
  const dateCopy = new Date(date.getTime());

  dateCopy.setHours(dateCopy.getHours() - numOfHours);

  return dateCopy;
}

const date = new Date('2022-04-27T08:30:10.820');

const result = subtractHours(4, date);

console.log(result); // 👉️ Wed Apr 27 2022 04:30:10

console.log(date); // 👉️ Wed Apr 27 2022 08:30:10 (didn't change original)

getTime 方法返回从 1970 年 1 月 1 日 00:00:00 到给定日期之间经过的毫秒数。

我们使用时间戳创建了 Date 对象的副本,因此在调用 setHours 方法时我们不会对其进行原地修改。

当我们必须在代码的其他位置使用原始 Date 对象时,复制日期非常有用。

一般来说,改变函数参数是一种不好的做法,因为多次将相同的参数传递给同一个函数会返回不同的结果。