我正在尝试通过以下代码获取本月的第一个和最后一个日期:
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
也不知道为什么我没有约会的时间是零分零秒
2条答案
按热度按时间amrnrhlw1#
为什么我没有零小时零分钟零秒的约会
因为您使用Date构造函数和年和月的值创建了 firstDate 和 lastDate。这些被视为本地(即主机系统),但您打印的时间戳为UTC。我猜你的主机系统偏移量是+5:30,所以不是7月1日本地,你得到的是UTC早5:30,所以6月30日是18:30。
要使用UTC执行您想要的操作,请使用 Date.UTC 生成日期:
你的计算也是错误的。Date构造函数需要ECMAScript月份(零索引),而不是日历月份,因此不要添加1。
请注意,UTC月份的开始和结束与本地开始和结束的时间相差本地时区偏移量。因此,对于6月底的+5:30,直到当地时间7月1日的5:30,它才是6月30日UTC结束的午夜。因此,如果您在7月1日的4:00运行代码并使用默认日期,它将返回6月UTC的开始和结束。
6jygbczu2#
你可以试试这个:
说明:
firstDate
:除了一个额外的“+1”之外,你基本上已经把firstDate
正确了,它会把下个月的日期取出来。所以只要去掉“+1”就可以解决了。lastDate
:我加1得到下个月的firstDate
,然后减去1(转换为当月lastDate
的历元时间,然后从历元转换回日期格式。