189

我正在使用一个日期选择器,它提供格式为 Sun Jul 7 00:00:00 EDT 2013 的日期。即使月份是 7 月,如果我执行 getMonth,它也会给我上个月。

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

我究竟做错了什么?

4

6 回答 6

378

因为getmonth()从 0 开始。你可能想要d1.getMonth() + 1实现你想要的。

于 2013-09-04T21:47:17.580 回答
30

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

最近我使用了 Moment.js库并且从未回头。试试看!

于 2013-09-04T21:47:48.990 回答
19

假设你使用你的变量

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

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

d1.getMonth() + 1 // month 

相比之下....这些方法不需要加 1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

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

d1.getDay()       // day of the week as a 

希望这可以帮助

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

于 2019-03-27T22:14:30.507 回答
4
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' });

或者

const full_date = new Date().toLocaleDateString(); //Date String
const full_time = new Date().toLocaleTimeString(); // Time String

输出

日期 =8/13/2020

时间 =12:06:13 AM

于 2020-08-12T19:09:18.243 回答
1

是的,这似乎是某人的一个愚蠢的决定,将月份设为零索引,而年份和日期则没有。这是我用来将日期转换为字段预期格式的一个小函数......

const now = new Date()
const month = (date) => {
    const m = date.getMonth() + 1;
    if (m.toString().length === 1) {
        return `0${m}`;
    } else {
        return m;
    }
};
const day = (date) => {
    const d = date.getDate();
    if (d.toString().length === 1) {
        return `0${d}`;
    } else {
        return d;
    }
};

const formattedDate = `${now.getFullYear()}-${month(now)}-${day(now)}`
于 2021-02-25T23:54:27.503 回答
0

您也可以通过这种方式找到当前月份

const today = new Date()
const getMonth = (today.getMonth() + 1).toString().length === 1 ? `0${today.getMonth() + 1}`:today.getMonth() + 1 

于 2021-12-09T09:16:40.633 回答