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.


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

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


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

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.


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


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)


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


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

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

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

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.


0

let today = new Date()

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

last30Days sera dans l'objet Date

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.