Comment obtenir 30 jours avant la date actuelle?

95

J'ai une boîte de saisie de calendrier de début et une boîte de saisie de calendrier de fin. Nous voulons que la zone de saisie du calendrier de début par défaut soit 30 jours avant la date actuelle et la zone de saisie du calendrier de fin soit la date actuelle. Voici mes vars de date.

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

La date de fin serait quelque chose comme var enddate = startdate - 30;évidemment cela ne fonctionnera pas.

Donc, si la date actuelle est le 30 décembre 2011, je voudrais que la date de début soit le 1er décembre 2011.

EDIT: Ma question a été répondue ... en quelque sorte. Date.today();et Date.today().add(-30);travailler mais j'ai besoin de la date au format January 13, 2012. Non Fri Jan 13 2012 10:48:56 GMT -055 (EST). De l'aide?

PLUS EDIT: Au moment d'écrire ces lignes, nous sommes en 2018. Utilisez simplement Moment.js . C'est le meilleur.

Jesse Atkinson
la source
stackoverflow.com/questions/563406/ ... Je pense que cela pourrait aider.
Tim Withers

Réponses:

148

Essayez d'utiliser l'excellente bibliothèque de dates JavaScript Datejs (l'original n'est plus maintenu, vous pourriez donc être intéressé par cette fourchette activement maintenue à la place):

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

[Éditer]

Voir aussi l'excellente bibliothèque de dates JavaScript Moment.js :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');
maerics
la source
3
J'avais du mal à obtenir les dates de début et de fin 30 jours avant et après aujourd'hui à UTC sans l'heure. Cela a fonctionné:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade
3
J'ai utilisé l' moment()approche et ajouté la toDate()méthode pour récupérer l'objet de date JavaScript. Merci!
Brylie Christopher Oxley
4
Pourquoi auriez-vous besoin d'utiliser une bibliothèque pour cela? Cela semble fou.
Harry
1
pouvez-vous recommander une bibliothèque pour console.log?
Andre
149

Essaye ça

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

Comme indiqué par @Neel, cette méthode retourne au format Javascript Timestamp. Pour le reconvertir en objet date, vous devez transmettre ce qui précède à un nouvel objet Date; new Date(priorDate).

Rory McCrossan
la source
14
Sans utiliser de bibliothèque externe, j'aime cette solution le plus. Merci.
Gowiem
16
Notez que cette méthode renvoie au format Javascript Timestamp. Pour le reconvertir en objet de date, vous devez transmettre ce qui précède ànew Date(priorDate)
Neel
1
Parfois, vous voulez juste vanilla js sans bibliothèque! Merci :)
Andrew McOlash
Je reçois setDate () n'est pas une fonction
chovy
1
@chovy la seule façon dont je peux imaginer que vous obtenez cette erreur est que vous n'appelez pas setDate() sur un Dateobjet. Cependant, il est impossible de diagnostiquer sans voir votre code.
Rory McCrossan le
86

Voici une solution moche pour vous:

var date = new Date(new Date().setDate(new Date().getDate() - 30));
Nahn
la source
24
C'est de manière hilarante la meilleure solution.
Mark Rogers
8
D'accord - c'est la meilleure solution. C'est exactement la solution de la réponse de Rory McCrossan - mais concise et complète (aucune bibliothèque externe requise).
Dan Nissenbaum
7
@MarkRogers "Hilarement" est le mot juste. Les dates JavaScript sont vraiment absurdes.
JosephStyons
Oui, c'est une solution simple et optimale.
Sachini Witharana le
37
startDate = new Date(today.getTime() - 30*24*60*60*1000);

La .getTime()méthode renvoie un horodatage JS standard (en millisecondes depuis le 1er janvier 1970) sur lequel vous pouvez utiliser des opérations mathématiques régulières, qui peuvent être renvoyées directement à l'objet Date.

Marc B
la source
8

Obtenez les 30 prochains jours à partir d'aujourd'hui

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

Obtenez le formulaire des 30 derniers jours aujourd'hui

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

WasiF
la source
5

Javascript peut le gérer sans aucune bibliothèque externe.

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

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

Freddy
la source
2

Facile.(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();
manish kumar
la source
1

J'utilise date.js . Il gère cela facilement et s'occupe de toute la méchanceté des années bissextiles.

Diodeus - James MacFarlane
la source
1

Je préférerai le moment js

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

endDate = moment().format('LL'); // February 28, 2015
Linoy
la source
0

Ceci est une version ES6

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )
Lawrence Edmondson
la source
En quoi est-ce différent de l'une des autres réponses, comme celle-ci ? De plus, il n'y a rien ici qui n'aurait pas pu être fait dans ES5 ... ou même ES3.
Heretic Monkey
0

Vous pouvez le faire simplement via 1 ligne de code en utilisant moment dans Node JS. :)

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

Je ne veux pas de format UTC, PLUS FACILE: P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()
Shagun Pruthi
la source
0

Si vous n'êtes pas enclin à momentjs, vous pouvez utiliser ceci:

let x = new Date()

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

Fondamentalement, il obtient la date actuelle (valeur numérique de la date du mois en cours), puis définit la valeur. Ensuite, il se convertit au format ISO à partir duquel je découpe la date numérique pure (c'est-à-dire 23/09/2019)

J'espère que ça aide quelqu'un.

Usman Khalil
la source
0

let today = new Date()

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

last30Days sera dans l'objet Date

Kevin Chandra
la source