2009-03-03 5 views

Antwort

5

Code:

function getPreviousSunday() 
{ 
    var today=new Date(); 
    return new Date().setDate(today.getDate()-today.getDay()-7); 
} 


function getPreviousMonday() 
{ 
    var today=new Date(); 
    if(today.getDay() != 0) 
     return new Date().setDate(today.getDate()-7-6); 
    else 
     return new Date().setDate(today.getDate()-today.getDay()-6); 
} 

Reasoning:

Hängt was man von vergangener Woche ersten Tag bedeutet. Ich nehme an, du meintest letzten Sonntag wegen dieser Diskussion.

die Anzahl der Tage, um Sie zu subtrahieren:

  • Holen Sie sich den aktuellen Tag der Woche.
  • Wenn der aktuelle Tag der Woche Sonntag subtrahieren Sie 7 Tage
  • Wenn der aktuelle Tag Montag Sie 8 Tage ist

...

  • subtrahieren Wenn der aktuelle Tag ist Samstag 13 Tage

der eigentliche Code, wenn Sie die Anzahl der Tage bestimmen zu subtrahieren ist einfach:

var previous_first_day_of_week=new Date().setDate(today.getDate()-X); 

Wo X ist der oben diskutierte Wert. Dieser Wert ist today.getDay() + 7

Wenn Sie am ersten Tag der Woche etwas anderes gemeint haben, sollten Sie in der Lage sein, die Antwort aus den obigen Schritten abzuleiten.

Hinweis: Es ist zulässig, negative Werte an die setDate-Funktion zu übergeben, und sie funktioniert ordnungsgemäß.

Für den Code über Montag. Sie haben diesen Sonderfall, weil getDay() Sonntag vor Montag bestellt. Also ersetzen wir getDay() in diesem Fall mit dem Wert von samstagday + 1 von getDay(), um den Sonntag bis zum Ende der Woche neu zu ordnen.

Wir verwenden den Wert 6 für die Subtraktion mit Montag, weil getDay() für jeden Tag 1 höher zurückgibt, als wir wollen.

1

Erster Tag der Woche kann entweder Sonntag oder Montag sein, je nachdem in welchem ​​Land Sie sind in:

function getPrevSunday(a) { 
    return new Date(a.getTime() - ((7+a.getDay())*24*60*60*1000)); 
}; 

function getPrevMonday(a) { 
    return new Date(a.getTime() - ((6+(a.getDay()||7))*24*60*60*1000)); 
}; 

Wenn Sie eine dateobject zum vorherigen Sonntag einstellen möchten Sie verwenden können:

a.setDate(a.getDate()-7-a.getDay()); 

und für den vorherigen Montag:

a.setDate(a.getDate()-6-(a.getDay()||7)); 
2
function previousWeekSunday(d) { 
    return new Date(d.getFullYear(), d.getMonth(), d.getDate() - d.getDay() - 7); 
} 

function previousWeekMonday(d) { 
    if(!d.getDay()) 
     return new Date(d.getFullYear(), d.getMonth(), d.getDate() - 13); 
    return new Date(d.getFullYear(), d.getMonth(), d.getDate() - d.getDay() - 6); 
} 
+0

Sie haben einen Bug im vorherigen WeekMonday. Jeder Sonntag geht nur 6 Tage zurück. – some

+0

Großer Fang. Fest. – Prestaul

2

Ich habe die Beiträge anderer Leute nicht verstanden. Hier ist das Javascript, das ich verwende, um eine Sun-Sat-Woche relativ zu einem bestimmten Tag anzuzeigen.So zum Beispiel, um „letzte Woche“ Sie überprüfen, was die Sonne/Sa Torpfosten vor bis sieben Tagen relativ waren: new Date()-7

// variables 
    var comparedate = new Date()-7; // a week ago 
    var dayofweek = comparedate.getDay(); 

    // just for declaration 
    var lastdate; 
    var firstadate; 

    // functions 
    function formatDate (dateinput) // makes date "mm/dd/yyyy" string 
    { 
     var month = dateinput.getMonth()+1; 
     if(month < 10) { month = '0' + month } 

     var date = dateinput.getDate(); 
     if(date < 10) { var date = '0' + date } 

     var dateoutput = month + '/' + date + '/' + dateinput.getFullYear(); 

     return dateoutput; 
    } 

    // Sunday to Saturday ... Sunday is the firstdate, Saturday is the lastdate 
    // (modify this block if you want something different eg: Monday to Sunday) 
    if (dayofweek == 6) { lastdate = comparedate; firstdate = comparedate-6; }   // Saturday 
    else if (dayofweek == 0) { lastdate = comparedate+6; firstdate = comparedate; }  // Sunday 
    else if (dayofweek == 1) { lastdate = comparedate+5; firstdate = comparedate-1; } // Monday 
    else if (dayofweek == 2) { lastdate = comparedate+4; firstdate = comparedate-2; } // Tuesday 
    else if (dayofweek == 3) { lastdate = comparedate+3; firstdate = comparedate-3; } // Wednesday 
    else if (dayofweek == 4) { lastdate = comparedate+2; firstdate = comparedate-4; } // Thursday 
    else if (dayofweek == 5) { lastdate = comparedate+1; firstdate = comparedate-5; } // Friday 

    // Finish 
    var outputtowebpage = formatDate(firstdate) + ' - ' + formatDate(lastdate); 
    document.write(outputtowebpage); 

Ich habe diese jedes Mal sehen Ich brauche es zu tun . Also hoffe ich, dass dies für andere hilfreich ist.

+0

Wenn ich es "relativ zu einem bestimmten Tag" mache, kann ich Dinge tun, bei denen der Kunde etwas wie "ein Werkzeug, das nach Woche abgeschlossene Dinge aufschlüsselt", tun kann, aber alles, was ich habe, ist das fertiggestellte Datum im Datensatz Daher muss der Code eine Menge relativer Wochennamen im laufenden Betrieb generieren. – undrline

+0

Ich habe Ihren Code in SailsJS ausprobiert und ich habe 'TypeError: compatedate.getDay ist keine Funktion' –

+0

@Lexynux, ich kenne SailsJS nicht. Wenn Sie sicher sind, dass der Vergleichswert beide Male gleich geschrieben wird, ist es möglich, dass er beim Erstellen der Variablen nicht 7 abzieht. Versuchen Sie etwas wie: 'var comparedate = new Date(); // heute verglichen - = 7; // vor einer Woche var dayofweek = comparedate.getDay(); ' – undrline

0

In den anderen Beispielen werden Sie ein Problem haben, wenn der Sonntag in einem anderen Monat fällt. Dies sollte das Problem lösen:

var today, todayNumber, previousWeek, week, mondayNumber, monday; 
today = new Date(); 
todayNumber = today.getDay(); 
previousWeek = -1; //For every week you want to go back the past fill in a lower number. 
week = previousWeek * 7; 
mondayNumber = 1 - todayNumber + week; 
monday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+mondayNumber); 
Verwandte Themen