【问题标题】:How to get 30 days prior to current date?如何获得当前日期前 30 天?
【发布时间】:2012-02-09 04:39:01
【问题描述】:

我有一个开始日历输入框和一个结束日历输入框。我们希望默认开始日历输入框在当前日期前 30 天,结束日历输入框为当前日期。这是我的日期变量。

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

结束日期类似于var enddate = startdate - 30; 显然这行不通。

因此,如果当前日期是 2011 年 12 月 30 日,我希望开始日期为 2011 年 12 月 1 日。

编辑:我的问题得到了回答……有点。 Date.today();Date.today().add(-30); 工作,但我需要January 13, 2012 格式的日期。不是Fri Jan 13 2012 10:48:56 GMT -055 (EST)。有什么帮助吗?

更多编辑:撰写本文时是 2018 年。只需使用 Moment.js。这是最好的。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

要从 JS Date 对象中减去天数,您可以使用 setDate() 方法以及开始计算的日期。这将返回一个纪元时间戳作为整数,因此要将其转换为 Date 您需要再次将其提供给 Date() 对象构造函数。最后一个示例如下所示:

var today = new Date();
var priorDate = new Date(new Date().setDate(today.getDate() - 30));

console.log(today)
console.log(priorDate);

【讨论】:

  • 不使用外部库我最喜欢这个解决方案。谢谢。
  • 请注意,此方法以 Javascript Timestamp 格式返回。要将其转换回日期对象,您需要将上述内容传递给new Date(priorDate)
  • 有时你只想要没有库的香草js!谢谢:)
  • 我得到 setDate() 不是函数
  • @chovy 我能想象你得到这个错误的唯一方法是因为你没有在Date 对象上调用setDate()。但是,如果不查看您的代码,就无法进行诊断。
【解决方案2】:

尝试使用优秀的Datejs JavaScript date library(原版不再维护,因此您可能对this actively maintained fork感兴趣):

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[编辑]

另见优秀Moment.js JavaScript date library

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

【讨论】:

  • 我很难在没有时间的情况下获得今天前后 30 天的开始日期和结束日期。这有效:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
  • 我使用了moment() 方法并附加了toDate() 方法来取回JavaScript 日期对象。谢谢!
  • 为什么需要为此使用库?这似乎很疯狂。
  • 你能推荐一个console.log的库吗?
  • 第一个答案不起作用请检查此链接而不是stackoverflow.com/questions/563406/add-days-to-javascript-date
【解决方案3】:

这是一个丑陋的解决方案:

var date = new Date(new Date().setDate(new Date().getDate() - 30));

【讨论】:

  • 搞笑的是,这是最好的解决方案。
  • 同意 - 这是最好的解决方案。这完全是 Rory McCrossan 的答案的解决方案 - 但简洁、完整(不需要外部库)。
  • @MarkRogers “热闹”是正确的词。 JavaScript 日期真的很荒谬。
  • 是的,这是一个简单且最佳的解决方案。
  • 丑也可以优雅。这是?
【解决方案4】:
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime() 方法返回一个标准 JS 时间戳(自 1970 年 1 月 1 日以来的毫秒数),您可以在该时间戳上使用常规数学运算,可以直接反馈给 Date 对象。

【讨论】:

    【解决方案5】:

    从今天开始获取下一个第 30 天

    let now = new Date()
    console.log('Today: ' + now.toUTCString())
    let next30days = new Date(now.setDate(now.getDate() + 30))
    console.log('Next 30th day: ' + next30days.toUTCString())

    立即获取最近 30 天的表单

    let now = new Date()
    console.log('Today: ' + now.toUTCString())
    let last30days = new Date(now.setDate(now.getDate() - 30))
    console.log('Last 30th day: ' + last30days.toUTCString())

    【讨论】:

      【解决方案6】:

      Javascript 可以在没有任何外部库的情况下处理它。

      var today = new Date();
      var dateLimit = new Date(new Date().setDate(today.getDate() - 30));
      
      document.write(today + "<br/>" + dateLimit)

      【讨论】:

        【解决方案7】:

        Simple 1 liner Vanilla Javascript 代码:

        const priorByDays = new Date(Date.now() - days * 24 * 60 * 60 * 1000)
        

        例如: days = 7 假设当前date = Fri Sep 18 2020 01:33:26 GMT+0530

        结果将是:Fri Sep 11 2020 01:34:03 GMT+0530

        这样做的美妙之处在于您可以对其进行操作以获得所需类型的结果

        • 时间戳:Date.now() - days * 24 * 60 * 60 * 1000

        • ISOString:new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString()

        【讨论】:

          【解决方案8】:

          简单。(Using Vanilla JS)

          let days=30;
          this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);
          

          ISO 格式?

          let days=30;
          this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
          

          【讨论】:

            【解决方案9】:

            我会更喜欢 moment js

            startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015
            
            endDate = moment().format('LL'); // February 28, 2015
            

            【讨论】:

              【解决方案10】:

              let today = new Date()

              let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

              last30Days 将在日期对象中

              【讨论】:

                【解决方案11】:

                我使用date.js。它可以轻松处理这个问题,并处理所有闰年的麻烦。

                【讨论】:

                  【解决方案12】:

                  这是一个 ES6 版本

                  let date = new Date()
                  let newDate = new Date(date.setDate(date.getDate()-30))
                  console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )
                  

                  【讨论】:

                  • 这与其他答案有何不同,例如this one?此外,这里没有什么是 ES5 或 ES3 无法完成的。
                  【解决方案13】:

                  您可以使用 Node JS 中的 moment 简单地通过 1 行代码来做到这一点。 :)

                      let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()
                  

                  不想要 UTC 格式,更简单:P

                      let lastOneMonthDate = moment().subtract(30,"days").toISOString()
                  

                  【讨论】:

                    【解决方案14】:

                    如果你不倾向于momentjs,你可以使用这个:

                    let x = new Date()

                    x.toISOString(x.setDate(x.getDate())).slice(0, 10)

                    基本上它获取当前日期(当前月份日期的数值),然后设置该值。然后它转换成 ISO 格式,我从中切出纯数字日期(即 2019-09-23)

                    希望它对某人有所帮助。

                    【讨论】:

                      【解决方案15】:

                      使用 moment.js

                      let startDate =  moment().subtract(30, "days").format('YYYY-MM-DD'); //2021-05-18
                      let endDate = moment().format('YYYY-MM-DD'); //2021-06-17
                      

                      【讨论】:

                        【解决方案16】:

                        对于寻找“dd 月 yyyy”格式的任何人,这对我有用:

                        let date = new Date()
                        
                        let newDate = new Date(date.setDate(date.getDate()-30))
                        
                        console.log(newDate.getDate()+ ' ' +newDate.toLocaleString('default', {month: 'long'}) + ' ' + newDate.getFullYear() )
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2019-10-19
                          • 2023-04-10
                          • 2016-05-17
                          • 1970-01-01
                          • 2023-03-24
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-10-23
                          相关资源
                          最近更新 更多