【问题标题】:getMonth in javascript gives previous monthjavascript中的getMonth给出上个月
【发布时间】:2013-09-08 13:54:30
【问题描述】:

我正在使用一个日期选择器,它提供格式为 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

我做错了什么?

【问题讨论】:

  • 是的...它是zero indexed
  • 不要对 javascript 中的日期失去理智。如果可以,请使用 Moment.js
  • 我不敢相信这是多么真实
  • Moment.js 无法正确执行 dateDiffs。如果您在同一个月内执行 dateDiffs 没关系,但请尝试跨 2 个不同的月份(即 27-04-2018 和 24-05-2018)执行此操作,这样就结束了。
  • 等你试试getYear()!! ;-)

标签: javascript date


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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)}`
    

    【讨论】:

    • 你好,不错的函数,但是如果 Date 的 1-9 也应该有一个零作为前缀,这意味着长度 === 1?
    • @ArttuPakarinen 抱歉,我现在才看到您的回复。是的,你是对的。我会编辑。
    • 你不需要所有这些行,因为你可以通过简单地这样做来避免编写它(new Date().getMonth() + 1).toString().padStart(2, 0)
    【解决方案3】:
    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

    【讨论】:

      【解决方案4】:

      假设你使用你的变量

      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 
      

      希望对您有所帮助

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 能说说你是怎么用的吗?
        【解决方案6】:

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

        【讨论】:

        • 我得说,将月份编号为零索引是我一段时间以来见过的最愚蠢的事情。 '
        • 如果 getDate 给出 1-31,为什么有人会希望它基于 0?
        • 很可能您将不得不这样做d1.getMonth() < 12 ? d1.getMonth() + 1 : 1 - 否则 12 月将是 13,不是吗?
        • @DanielKhan 不,因为 12 月将是 11,因此将 1 添加到它会正确地使其成为 12。getMonth() 函数不应返回超过 11 的值。
        • @LarryBud,原因可能与日期的其他部分(月日、年、小时、分钟、秒...)相反,这些部分总是按原样用作数字,月份通常使用名称数组转换为文本,这当然是从 0 开始的。在 C 标准库中已经是这样了,它必须有 40 多年的历史了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 2022-01-11
        相关资源
        最近更新 更多