[javascript] How to get 30 days prior to current date?

I have a start calendar input box and an end calendar input box. We want defaults start calendar input box 30 days prior to current date and the end calendar input box to be the current date. Here is my date vars.

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();

The end date would be something like var enddate = startdate - 30; Obviously this won't work.

So if the current date is December 30, 2011 I'd want the start date to read December 1, 2011.

EDIT: My question was answered... sort of. Date.today(); and Date.today().add(-30); work but I need the date in the format of January 13, 2012. Not Fri Jan 13 2012 10:48:56 GMT -055 (EST). Any help?

MORE EDIT: As of this writing it's 2018. Just use Moment.js. It's the best.

This question is related to javascript jquery

The answer is


If you aren't inclined to momentjs, you can use this:

let x = new Date()

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

Basically it gets the current date (numeric value of date of current month) and then sets the value. Then it converts into ISO format from which I slice down the pure numeric date (i.e. 2019-09-23)

Hope it helps someone.


let today = new Date()

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

last30Days will be in Date Object


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

The .getTime() method returns a standard JS timestamp (milliseconds since Jan 1/1970) on which you can use regular math operations, which can be fed back to the Date object directly.


You can do that simply through 1 line of code using moment in Node JS. :)

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

Don't want UTC format, EASIER :P

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

Simple 1 liner Vanilla Javascript code :

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

For example: days = 7 Assume current date = Fri Sep 18 2020 01:33:26 GMT+0530

The result would be : Fri Sep 11 2020 01:34:03 GMT+0530

The beauty of this is you can manipulate it to get result in desired type

  • timestamp : Date.now() - days * 24 * 60 * 60 * 1000

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


I will prefer moment js

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

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

I use date.js. It handles this easily and takes care of all the leap-year nastiness.


Get next 30 days from today

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

Get last 30 days form today

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


Here's an ugly solution for you:

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

Easy.(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();

Javascript can handle it without any external libraries.

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


Try this

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

As noted by @Neel, this method returns in Javascript Timestamp format. To convert it back to date object, you need to pass the above to a new Date object; new Date(priorDate).


This is an ES6 version

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