javascript中的getMonth上个月给出了

dev*_*747 116 javascript date

我正在使用一个日期选择器,它以2013年7月7日00:00:00格式提供日期.尽管月份表示7月,如果我执行getMonth,它会给我上个月.

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Rah*_*thi 220

因为getmonth()从0开始.你可能想要d1.getMonth() + 1达到你想要的效果.

  • 我得说,有一个月零号索引是我在一段时间内看到的最愚蠢的事情." (163认同)
  • @DanielKhan Nope,因为12月将是11,所以在它上面添加1将正确地使它成为12. getMonth()函数不应该返回超过11的值. (6认同)
  • @LarryBud,推理可能与日期的其他部分(月份,年,小时,分钟,秒......)相反,它们总是被用作数字,月份通常转换为文本,使用一组名字,当然是0.C标准库已经是这种情况,必须超过40年. (6认同)
  • 最有可能你必须做`d1.getMonth()<12?d1.getMonth()+ 1:1` - 否则12月会是13,不是吗? (4认同)
  • 如果getDate给出1-31,为什么会有人想要它0? (3认同)

let*_*ves 17

getMonth()函数是基于零索引的.你需要这样做d1.getMonth() + 1

最近我使用了Moment.js库,从未回头.试试吧!


jas*_*ard 7

假设您使用变量

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
Run Code Online (Sandbox Code Playgroud)

一个月需要+1才能准确,它从0开始计数

d1.getMonth() + 1 // month 
Run Code Online (Sandbox Code Playgroud)

相反,...这些方法不需要加1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    
Run Code Online (Sandbox Code Playgroud)

并注意它.getDate()不是。getDay()

d1.getDay()       // day of the week as a 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

我怀疑这些方法由于历史原因缺乏一致性


Mur*_*rad 5

const d = new Date();
const time = d.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', second:'numeric', hour12: true });
const date = d.toLocaleString('en-US', { day: 'numeric', month: 'numeric', year:'numeric' });
Run Code Online (Sandbox Code Playgroud)

或者

const full_date = new Date().toLocaleDateString(); //Date String
const full_time = new Date().toLocaleTimeString(); // Time String
Run Code Online (Sandbox Code Playgroud)

输出

日期=8/13/2020

时间=12:06:13 AM