javascript 如何在nodejs中获取当前月份的最后一个和第一个日期

w3nuxt5m  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(169)

我正在尝试通过以下代码获取本月的第一个和最后一个日期:

let d = new Date();
let month = d.getMonth() + 1;
console.log(month);
let firstDate = new Date(d.getFullYear(), d.getMonth() + 1);
let lastDate = new Date(d.getFullYear(), d.getMonth() + 1);
console.log("First Date: ", firstDate);
console.log("Last Date", lastDate);

但我正在获得输出:-

First Date:  2023-06-30T18:30:00.000Z
Last Date 2023-06-30T18:30:00.000Z

也不知道为什么我没有约会的时间是零分零秒

amrnrhlw

amrnrhlw1#

为什么我没有零小时零分钟零秒的约会
因为您使用Date构造函数和年和月的值创建了 firstDatelastDate。这些被视为本地(即主机系统),但您打印的时间戳为UTC。我猜你的主机系统偏移量是+5:30,所以不是7月1日本地,你得到的是UTC早5:30,所以6月30日是18:30。
要使用UTC执行您想要的操作,请使用 Date.UTC 生成日期:

function getStartAndEndOfMonthUTC(date = new Date()) {
  let y = date.getUTCFullYear();
  let m = date.getUTCMonth();
  let firstOfMonth = new Date(Date.UTC(y, m, 1));
  let lastOfMonth = new Date(Date.UTC(y, m+1, 0));
  return {firstOfMonth, lastOfMonth};
}

console.log(getStartAndEndOfMonthUTC());

你的计算也是错误的。Date构造函数需要ECMAScript月份(零索引),而不是日历月份,因此不要添加1。
请注意,UTC月份的开始和结束与本地开始和结束的时间相差本地时区偏移量。因此,对于6月底的+5:30,直到当地时间7月1日的5:30,它才是6月30日UTC结束的午夜。因此,如果您在7月1日的4:00运行代码并使用默认日期,它将返回6月UTC的开始和结束。

6jygbczu

6jygbczu2#

你可以试试这个:

let firstDate = new Date(d.getFullYear(), d.getMonth())
let lastDate = new Date(new Date(d.getFullYear(), d.getMonth() + 1) - 1)

说明:

  1. firstDate:除了一个额外的“+1”之外,你基本上已经把firstDate正确了,它会把下个月的日期取出来。所以只要去掉“+1”就可以解决了。
  2. lastDate:我加1得到下个月的firstDate,然后减去1(转换为当月lastDate的历元时间,然后从历元转换回日期格式。

相关问题