JavaScript: Wie berechnet man das Datum, das vor 2 Tagen liegt? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
dat789

Mögliches Duplikat:

Subtrahieren Sie Tage von einem Datum in Javascript

Ich habe ein JavaScript, das im Grunde ein Datum zurückgibt, das vor 2 Tagen liegt. Es ist wie folgt:

var x;
var m_names = new Array("January", "February", "March", 
    "April", "May", "June", "July", "August", "September", 
    "October", "November", "December");

var d = new Date();
var twoDaysAgo = d.getDate()-2;  //change day here
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
var x = twoDaysAgo + "-" + m_names[curr_month] + "-" + curr_year;

document.write(x);

Unter der Annahme, dass heute der 12. Dezember 2012 ist, wird oben das Datum 10. Dezember 2012 zurückgegeben. Ich glaube nicht, dass dies dynamisch funktionieren wird, wenn wir uns in einen neuen Monat bewegen ODER den Tag von -2 auf -15 ändern. Es funktioniert erst ab dem 3. des Monats.

Wie kann ich dies so ändern, dass es heute der 12. Dezember 2012 ist und ich möchte, dass es mir das Datum vor 15 Tagen zurückgibt, es sollte der 27. November 2012 sein … und nicht der 3. Dezember 2012?

Jede Hilfe geschätzt. Vielen Dank! Ich bin ein Javascript-Neuling.

  • Hast du dir das angeschaut? stackoverflow.com/questions/1296358/…

    – buffcoredave

    12. Dezember 2012 um 11:14 Uhr

  • new Date(Date.now() - 24 * 3600 * 1000)

    – Pavel Evstigneev

    26. September 2017 um 17:48 Uhr

Benutzer-Avatar
RobG

Wenn Sie ein Datumsobjekt haben, können Sie es auf zwei Tage zurücksetzen, indem Sie zwei vom Datum subtrahieren:

var d = new Date();
d.setDate(d.getDate() - 2);
console.log(d.toString());

// First of month
var c = new Date(2017,1,1); // 1 Feb -> 30 Jan
c.setDate(c.getDate() - 2);
console.log(c.toString());

// First of year
var b = new Date(2018,0,1); // 1 Jan -> 30 Dec
b.setDate(b.getDate() - 2);
console.log(b.toString());

  • Dies gibt Millisekunden zurück, Sie müssen das Ergebnis wieder in den Date-Konstruktor einspeisen, um ein Datumsobjekt zu erhalten. Siehe Antwort von @pffried unten

    – Petrow

    4. Oktober 2015 um 13:01 Uhr

  • @Petrov—der Datum einstellen -Methode ändert das Datumsobjekt und gibt den neuen Zeitwert zurück. Wenn Sie das an den Date-Konstruktor übergeben, wird unnötigerweise ein neues Date mit demselben erstellt Zeitwert.

    – RobG

    5. Oktober 2015 um 13:21 Uhr

  • Diese Antwort ist richtig. Es ist wichtig zu beachten, dass wenn getDate() - x 0 oder negativ ist, wird es zum vorherigen Monat verschoben. @ Petrow – getDate() arbeitet NICHT mit Millisekunden.

    – McAden

    15. Oktober 2015 um 21:45 Uhr

  • Was passiert, wenn das Datum „JJJJ-MM-01“ oder „JJJJ-MM-01“ ist? Das wird nicht funktionieren.

    – bpawlow

    1. Juni 2016 um 13:33 Uhr

  • @bpavlov–siehe McAdens Kommentar vor Ihrem. Es klappt.

    – RobG

    1. Juni 2016 um 23:57 Uhr


Benutzer-Avatar
pfried

Sie können Folgendes tun

​var date = new Date();
var yesterday = date - 1000 * 60 * 60 * 24 * 2;   // current date's milliseconds - 1,000 ms * 60 s * 60 mins * 24 hrs * (# of days beyond one to go back)
yesterday = new Date(yesterday);
console.log(yesterday);​

Das Datum ist als Zahl in Millisekunden verfügbar, Sie ziehen heute zwei Tage ab und erstellen ein neues Datum mit dieser Anzahl von Millisekunden

  • Ich würde dies der ausgewählten Antwort vorziehen, da dies für Überschneidungen in Monaten sorgt

    – Femi Oni

    29. Juli 2015 um 16:29 Uhr

  • Auch dafür sorgt die Verwendung des Datumsmoduls.

    – dougalg

    31. August 2015 um 13:32 Uhr

  • @FemiOni – die akzeptierte Antwort tut das auch. Diese Antwort geht davon aus, dass alle Tage 24 Stunden lang sind. Bei Umstellung auf Sommerzeit sind sie entweder 23 oder 25 Stunden, daher liefert das obige in diesen Fällen ein falsches Ergebnis.

    – RobG

    5. Oktober 2015 um 13:23 Uhr


  • Ist dies in Bezug auf Sommerzeitumstellungen sicher? Ich glaube nicht.

    – Kopffüßer

    13. Oktober 2020 um 7:03 Uhr

1216070cookie-checkJavaScript: Wie berechnet man das Datum, das vor 2 Tagen liegt? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy