Javascript 格式化日期会给我一个不同于已传递日期的日期

Javascript 格式化日期会给我一个不同于已传递日期的日期,javascript,Javascript,我需要得到当前月份的第一天和最后一天,这非常有效,但当我将日期格式化为如下所示时,yyyy/mm/dd它会与我传递的日期不同 例如,如果a在我格式化时通过了2020年5月1日,则该日期将返回2020年4月30日 var startID=document.getElementById('start'); var datenow=新日期(); var firstday=新日期(datenow.getFullYear(),datenow.getMonth(),1); firstday=firstda

我需要得到当前月份的第一天和最后一天,这非常有效,但当我将日期格式化为如下所示时,
yyyy/mm/dd
它会与我传递的日期不同

例如,如果a在我格式化时通过了2020年5月1日,则该日期将返回2020年4月30日

var startID=document.getElementById('start');
var datenow=新日期();
var firstday=新日期(datenow.getFullYear(),datenow.getMonth(),1);
firstday=firstday.toISOString().slice(0,10);
startID.value=第一天


开始日期
时区很棘手!根据时区的不同,任何给定的时间戳看起来都可能是不同的日期。ISO字符串忽略时区。因此,对于初学者,您可以只执行
new Date().toString()

,这是因为
firstday.toISOString()
返回UTC时区中的日期,因此如果您位于其他地方,您可以预期日期的变化

不幸的是,如果您没有使用类似的方法(而且它似乎不适合这样一个简单的任务),就没有解决方案。我向您推荐如下产品:

const [day, month, year] = firstday.toLocaleDateString('en-US').split('.');
firstday = [year, month, day].join('/')

问题的根本原因在于使用getMonth()方法来获取月号

getMonth()方法返回0到11之间的整数(一月=0,…十二月=11)

可以通过向getMonth()添加1来修复此问题

下面是一个显示当前日期、第一天和最后一天的工作示例:

var now = new Date()
console.log("Today = " + now)

let month = (now.getMonth() + 1)
let year = now.getFullYear()

firstDay = ("1/" + month + "/" + year)
lastDay = ((new Date(year, month, 0)).getDate() + "/" + month + "/" + year)

console.log("First day = " + firstDay)
console.log("Last day = " + lastDay)
Today = Sat May 30 2020 20:54:56 GMT+0100 (British Summer Time)
First day = 1/5/2020
Last day = 31/5/2020
输出:

var now = new Date()
console.log("Today = " + now)

let month = (now.getMonth() + 1)
let year = now.getFullYear()

firstDay = ("1/" + month + "/" + year)
lastDay = ((new Date(year, month, 0)).getDate() + "/" + month + "/" + year)

console.log("First day = " + firstDay)
console.log("Last day = " + lastDay)
Today = Sat May 30 2020 20:54:56 GMT+0100 (British Summer Time)
First day = 1/5/2020
Last day = 31/5/2020
更多信息:

var now = new Date()
console.log("Today = " + now)

let month = (now.getMonth() + 1)
let year = now.getFullYear()

firstDay = ("1/" + month + "/" + year)
lastDay = ((new Date(year, month, 0)).getDate() + "/" + month + "/" + year)

console.log("First day = " + firstDay)
console.log("Last day = " + lastDay)
Today = Sat May 30 2020 20:54:56 GMT+0100 (British Summer Time)
First day = 1/5/2020
Last day = 31/5/2020

用于正确设置日期格式并执行与日期相关的操作。它使事情更容易实现。

您期望的日期是什么,您得到的日期是错误的?@mrid我想以
yyy/mm/dd
的格式获取当前月份的第一天。我得到了2020/04/30的答案,谢谢你的解释。我已经做了
toString()
,但没有告诉我本例中我尝试设置格式的日期。感谢您为我澄清这一点。你知道如何解决这个问题吗?我已经更新了答案,并为你的问题添加了可能的解决方法,正如我之前解释的那样,当我做getMonth()时,问题是当我试图格式化日期时,我用一个使用(getMonth()+1)获取当前月份的工作示例代码更新了答案。