如何在当前日期之前30天获得?


95

我有一个开始日历输入框和一个结束日历输入框。我们希望将当前日期之前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即可。这是最好的。


stackoverflow.com/questions/563406/…我认为这可能会有所帮助。
Tim Withers

Answers:


146

尝试使用出色的Datejs JavaScript日期库(不再维护原始日期库,因此您可能对此主动维护的fork感兴趣):

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

[编辑]

另请参见出色的Moment.js JavaScript日期库

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

3
我努力在今天之前和之后的30天(无时间)获得开始和结束日期。这有效:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade 2015年

3
我使用了该moment()方法,并附加了该toDate()方法以获取JavaScript date对象。谢谢!
Brylie Christopher Oxley's

4
为什么您需要为此使用库?太疯狂了
哈里

1
您可以为console.log推荐一个库吗?
Andre Elrico

149

试试这个

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

如@Neel所指出的,此方法以Javascript时间戳格式返回。要将其转换回date对象,您需要将以上内容传递给新的Date对象;new Date(priorDate)


14
在不使用外部库的情况下,我最喜欢此解决方案。谢谢。
Gowiem 2014年

16
请注意,此方法以Javascript时间戳格式返回。要将其转换回日期对象,您需要将以上内容传递给new Date(priorDate)
Neel

1
有时,您只是想要没有库的Vanilla JS!谢谢:)
安德鲁·麦克拉什

我得到setDate()不是函数
chovy

1
@chovy我能想象你得到的错误是因为你没有调用的唯一途径setDate()一上Date对象。但是,如果不看代码就无法诊断。
罗里·麦克罗斯桑

85

这是给您的丑陋解决方案:

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

23
可笑的是,这是最好的解决方案。
马克·罗杰斯

7
同意-这是最好的解决方案。这正是 Rory McCrossan的答案的解决方案-但简洁,完整(不需要外部库)。
Dan Nissenbaum '16

6
@MarkRogers“搞笑”是正确的词。JavaScript日期确实是荒谬的。
JosephStyons

37
startDate = new Date(today.getTime() - 30*24*60*60*1000);

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


8

从今天起获取下一个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())


5

Javascript可以处理它,而无需任何外部库。

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

document.write(today + "<br/>" + dateLimit)


2

简单。(Using Vanilla JS)

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

ISOFormat?

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


1

我会比较喜欢js

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

endDate = moment().format('LL'); // February 28, 2015

0

这是ES6版本

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

这与其他任何答案(例如这个答案)有何不同?另外,这里没有什么是ES5 ...甚至ES3不可能做到的。
异端猴子

0

您可以使用Node JS中的moment通过1行代码简单地完成此操作。:)

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

不想使用UTC格式,EASIER:P

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

0

如果您不喜欢momentjs,可以使用以下代码:

let x = new Date()

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

基本上,它获取当前日期(当月日期的数值),然后设置该值。然后将其转换为ISO格式,从中我可以截取纯数字日期(即2019-09-23)

希望它能帮助某人。


0

let today = new Date()

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

last30Days 将在日期对象中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.