JS检索一年中的第一天和最后一天

问题描述

给定一年,我试图检索当年的开始和结束(例如01-01-XXXX 00:00和12-31-XXXX 23:59:59),但是我得到的结果不正确。

我的代码

var date = new Date(2020,1);
var end_date = new Date(2020,11,31);
console.log(date,end_date);

结果:

2019-12-31T23:00:00.000Z 2020-12-30T23:00:00.000Z

奇怪的是,如果我在浏览器控制台中运行它,它就可以正常工作,所以我猜这与Node或时区有关吗?

解决方法

该代码对于在当前环境的本地时区中创建年份的开始和结束日期是正确的。

当您将它们登录到控制台时,将显示它们的等效UTC日期,显然,您是在时间为UTC + 1的地方运行此日期。

因此,如果要在年初和年底使用 local 日期,则该代码是正确的。如果您希望 UTC 日期为该年开始和结束的日期,可以执行以下操作:

var date = new Date(Date.UTC(2020,1));
var end_date = new Date(Date.UTC(2020,11,31));
console.log(date,end_date);

看到Node和浏览器之间存在差异的原因是,日期没有记录到控制台的标准。 Node以ISO Z格式(UTC)记录它们,而某些浏览器将它们记录为本地时间,这正是您所看到的。

,

您会在浏览器控制台上获得正确的答案,因为 JavaScript是一种客户端脚本语言,并且浏览器会在成功请求后在本地计算机上对其进行解释,因此会采用您的本地时区。 因此,如果您编写此JS代码并在浏览器或任何本地JS环境上运行它,您将获得正确的结果

但是, Node JS是源自JavaScript的服务器端框架。 这意味着将用Node JS或任何服务器端语言编写的任何内容都将在服务器上执行,并且您的代码将考虑服务器所在位置的时区。

因此,请使用JavaScript显示本地时区