wake-up-neo.com

Tage von einem Datum in JavaScript abziehen

Kennt jemand eine einfache Möglichkeit, ein Datum (z. B. Heute) zu nehmen und X Tage zurück zu gehen?

Wenn ich zum Beispiel das Datum 5 Tage vor dem heutigen Tag berechnen möchte.

457
jonhobbs

Versuchen Sie etwas so:

 var d = new Date();
 d.setDate(d.getDate()-5);

Beachten Sie, dass dies das Datumsobjekt ändert und den Zeitwert des aktualisierten Datums zurückgibt.

var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 5);

document.write('<br>5 days ago was: ' + d.toLocaleString());

716
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);

Wenn Sie während Ihrer gesamten Webanwendung viele Daten zum Manipulieren von Kopfschmerzen verwenden, wird DateJS Ihnen das Leben erleichtern:

http://simonwillison.net/2007/Dec/3/datejs/

59
karim79

Es geht ungefähr so:

var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
46
Chris Nielsen

Ich habe festgestellt, dass der getDays + X nicht über Tag/Monat-Grenzen hinweg funktioniert. Die Verwendung von getTime funktioniert, solange Ihr Datum nicht vor 1970 liegt.

var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
20
awjr

holen Sie sich moment.js. Alle coolen Kinder benutzen es. Es hat mehr Formatierungsoptionen usw. Wo

var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');

Wahlweise! Konvertieren Sie in JS Date obj für Winkelbindung.

var date = new Date(dateMnsFive.toISOString());

Wahlweise! Format

var date = dateMnsFive.format("YYYY-MM-DD");
13
Kentonbmax

Ich habe diesen Prototyp für Date erstellt, so dass ich negative Werte übergeben konnte, um Tage zu entfernen, und positive Werte, um Tage hinzuzufügen.

if(!Date.prototype.adjustDate){
    Date.prototype.adjustDate = function(days){
        var date;

        days = days || 0;

        if(days === 0){
            date = new Date( this.getTime() );
        } else if(days > 0) {
            date = new Date( this.getTime() );

            date.setDate(date.getDate() + days);
        } else {
            date = new Date(
                this.getFullYear(),
                this.getMonth(),
                this.getDate() - Math.abs(days),
                this.getHours(),
                this.getMinutes(),
                this.getSeconds(),
                this.getMilliseconds()
            );
        }

        this.setTime(date.getTime());

        return this;
    };
}

Um es zu benutzen, kann ich einfach schreiben:

var date_subtract = new Date().adjustDate(-4),
    date_add = new Date().adjustDate(4);
12
Rob Dawley

Ich mag Mathematik in Millisekunden. Verwenden Sie also Date.now()

var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds

und wenn es Ihnen gefällt, formatiert

new Date(newDate).toString(); // or .toUTCString or .toISOString ...

HINWEIS: Date.now() funktioniert nicht in älteren Browsern (zB IE8, denke ich). Polyfill hier .

UPDATE Juni 2015

@socketpair wies auf meine Schlamperei hin. Wie er/sie sagt "Einige Tage im Jahr haben 23 Stunden und 25 aufgrund von Zeitzonenregeln".

Um dies zu erweitern, wird die Antwort oben zu Ungenauigkeiten bei der Tageslichteinsparung führen, wenn Sie den LOCAL-Tag vor 5 Tagen in einer Zeitzone mit Änderungen an der Tageslichteinsparung berechnen möchten 

  • (falsch) annehmen, dass Date.now() dir jetzt das aktuelle LOCAL gibt, oder 
  • verwenden Sie .toString(), das das lokale Datum zurückgibt und daher mit dem Basisdatum Date.now() in UTC nicht kompatibel ist. 

Es funktioniert jedoch, wenn Sie Ihre Berechnungen in UTC durchführen, z

A. Sie möchten das UTC-Datum vor 5 Tagen von JETZT (UTC)

var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString

B. Sie beginnen mit einem anderen UTC-Basisdatum als "jetzt" und verwenden Date.UTC().

newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
10
poshest

teilen Sie Ihr Datum in Teile auf und geben Sie ein neues Datum mit den angepassten Werten zurück

function DateAdd(date, type, amount){
    var y = date.getFullYear(),
        m = date.getMonth(),
        d = date.getDate();
    if(type === 'y'){
        y += amount;
    };
    if(type === 'm'){
        m += amount;
    };
    if(type === 'd'){
        d += amount;
    };
    return new Date(y, m, d);
}

Denken Sie daran, dass die Monate null sind, die Tage jedoch nicht. dh neues Datum (2009, 1, 1) == 1. Februar 2009, neues Datum (2009, 1, 0) == 31. Januar 2009;

9
Joshua

Ein paar der bestehenden Lösungen waren nahe, aber nicht genau das, was ich wollte. Diese Funktion arbeitet sowohl mit positiven als auch negativen Werten und behandelt Grenzfälle.

function addDays(date, days) {
    return new Date(
        date.getFullYear(),
        date.getMonth(),
        date.getDate() + days,
        date.getHours(),
        date.getMinutes(),
        date.getSeconds(),
        date.getMilliseconds()
    );
}
9
Joel Fillmore

Ein Problem mit der getDate ()/setDate () -Methode ist, dass sie zu leicht alles in Millisekunden umwandelt und die Syntax manchmal schwer zu folgen ist.

Stattdessen arbeite ich gerne daran, dass 1 Tag = 86.400.000 Millisekunden ist.

Also für Ihre spezielle Frage:

today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))

Klappt wunderbar.

Ich verwende diese Methode ständig für die Berechnung von 30/60/365 Tagen.

Sie können dies einfach extrapolieren, um Zeiteinheiten für Monate, Jahre usw. zu erstellen.

6

function addDays (date, daysToAdd) {
  var _24HoursInMilliseconds = 86400000;
  return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};

var now = new Date();

var yesterday = addDays(now, - 1);

var tomorrow = addDays(now, 1);

3
Petr Makarov

Ohne die zweite Variable zu verwenden, können Sie 7 für durch x Tage x ersetzen:

let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
2
vaibhavmaster

Verwenden Sie MomentJS .

function getXDaysBeforeDate(referenceDate, x) {
  return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a');
}

var yourDate = new Date(); // let's say today
var valueOfX = 7; // let's say 7 days before

console.log(getXDaysBeforeDate(yourDate, valueOfX));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

2

für mich funktionierten alle Kombinationen gut mit dem folgenden Code-Snipplet, Das Snippet ist für die Angular-2-Implementierung. Wenn Sie Tage hinzufügen müssen, übergeben Sie die positive Anzahl der Tage, wenn Sie die negative Anzahl der Tage subtrahieren müssen

function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
    d.getFullYear(),
    d.getMonth(),
    (d.getDate() + numberofDays)
);
}
1
pritesh agrawal

Ich habe eine Funktion zur Datumsmanipulation erstellt. Sie können eine beliebige Anzahl von Tagen, Stunden, Minuten hinzufügen oder abziehen. 

function dateManipulation(date, days, hrs, mins, operator) {
   date = new Date(date);
   if (operator == "-") {
      var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
      var newDate = new Date(date.getTime() - durationInMs);
   } else {
      var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
      var newDate = new Date(date.getTime() + durationInMs);
   }
   return newDate;
 }

Rufen Sie nun diese Funktion auf, indem Sie Parameter übergeben. Hier ist zum Beispiel ein Funktionsaufruf, um das Datum vor 3 Tagen ab heute abzurufen.

var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
1
Malvi Panchal

Die einfache Verwaltung von Datumsangaben ist die Verwendung von Moment.js

Sie können add verwenden. Beispiel

var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);

Docs http://momentjs.com/docs/#/manipulating/add/

1
Juan Caicedo

Die ersten Antworten führten zu einem Fehler in meinem Code, bei dem am ersten des Monats ein zukünftiges Datum im aktuellen Monat festgelegt wurde. Hier ist was ich getan habe,

curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to Epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set Epoch time
1
Kishore Avineni

Sehen Sie den folgenden Code, subtrahieren Sie die Tage vom aktuellen Datum. Stellen Sie den Monat auch entsprechend dem abgezogenen Datum ein.

var today = new Date();
var substract_no_of_days = 25;

today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();

alert(substracted_date);
1
Manoj Jha

Wenn Sie eine Anzahl von Tagen subtrahieren und Ihr Datum in einem für Menschen lesbaren Format formatieren möchten, sollten Sie ein benutzerdefiniertes DateHelper-Objekt erstellen, das ungefähr wie folgt aussieht:

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));

(siehe auch this Fiddle )

1
John Slegers

Ich bekomme gute Laufleistung außerhalb von date.js:

http://www.datejs.com/

d = new Date();
d.add(-10).days();  // subtract 10 days

Nett!

Website beinhaltet diese Schönheit:

Datejs analysiert nicht nur Strings, sondern schneidet sie sauber in zwei Teile

1
Bret Weinraub

Sie können Javascript verwenden.

var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today

Für PHP

$date =  date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;

Ich hoffe es wird dir helfen.

0
Phoenix

Mit dem Momentjs können Sie sehen, wie Sie das Datum 5 Tage vor dem heutigen Datum finden können.

moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03
0
Alex P

Versuchen Sie so etwas

dateLimit = (curDate, limit) => {
    offset  = curDate.getDate() + limit
    return new Date( curDate.setDate( offset) )
}

currDate kann ein beliebiges Datum sein

limit könnte der Unterschied in der Anzahl der Tage sein (positiv für die Zukunft und negativ für die Vergangenheit)

0
wahid_abdul

Ich mag das Folgende, weil es eine Zeile ist. Nicht perfekt für DST-Änderungen, aber normalerweise gut genug für meine Bedürfnisse.

var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
0
ScottE

var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;

var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );

0
belal ahmad

Beim Einstellen des Datums wird das Datum in Millisekunden konvertiert. Sie müssen es also in ein Datum zurückwandeln:

Diese Methode berücksichtigt auch die Neujahrsänderung usw.

function addDays( date, days ) {
    var dateInMs = date.setDate(date.getDate() - days);
    return new Date(dateInMs);
}

var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
0
Daniel Williams

Verwendung der modernen JavaScript-Funktionssyntax

const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));

console.log(getDaysPastDate(1)); // yesterday

0
vdegenne

var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 31);

document.write('<br>5 days ago was: ' + d.toLocaleString());

0
gatlingovind

Ich spielte herum und fand eine einfache Lösung:

Benutze .setDate(+daysCount|-daysCount); Das Symbol =|- ist ein Muss.

let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);

today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
0
Black Mamba

Ich habe in Millisekunden umgewandelt und Tage abgezogen, ansonsten ändern sich Monat und Jahr nicht und sind logisch

var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10),        // Year
              parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
              parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();

Hoffnung hilft

0
hemanjosko
var today = new Date();
var tmpDate = new Date();
var i = -3; var dateArray = [];
while( i < 4 ){
    tmpDate = tmpDate.setDate(today.getDate() + i);
  tmpDate = new Date( tmpDate );
  var dateString = ( '0' + ( tmpDate.getMonth() + 1 ) ).slice(-2) + '-' + ( '0' + tmpDate.getDate()).slice(-2) + '-' + tmpDate.getFullYear();
    dateArray.Push( dateString );
    i++;
}
console.log( dateArray );
0
zion

Dies gibt Ihnen die letzten 10 Tage Ergebnis 110% arbeiten, erhalten Sie keine Art von Problem

var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;

sie können die Subtraktionstage gemäß Ihren Anforderungen ändern

0
Zubair