5 Stimmen

Holen Sie sich die Tage in einer Woche in Javascript, die Woche beginnt am Sonntag

Hier ist die vom Benutzer eingegebene Eingabe:

Jahr = 2011, Monat = 3 (März), Woche = 2

Ich möchte die Tage in der 2. Woche des März 2011 in JavaScript erhalten.

z.B. Sonntag, 6., Montag, 7., Dienstag, 8., Mittwoch, 9., Donnerstag, 10., Freitag, 11., Samstag, 12.

Irgendwelche Ideen? Danke!

0 Stimmen

Wie definieren Sie die erste Woche des Monats? Ist es die Woche, in der der erste Tag des Monats liegt? In diesem Fall könnte es auch die letzte Woche des Vormonats sein, was verwirrend sein könnte. An vielen Orten ist der erste Tag der Woche der Montag, nicht der Sonntag.

0 Stimmen

@RobG "..der erste Tag der Woche ist Montag, nicht Sonntag.." das stimmt, wenn wir uns auf ISO beziehen. Aber es hängt auch davon ab, in welchem Land du lebst. Die meisten asiatischen Länder beginnen ihren Woche am Sonntag. Ich habe meine Woche am Sonntag angefangen, weil das mein Kunde mir gesagt hat.

9voto

Delan Azabani Punkte 76072

Gegeben

var year = 2011;
var month = 3;
var week = 2;

und

var firstDateOfMonth = new Date(year, month - 1, 1); // Datum: Jahr-Monat-01

var ersterTagDesMonats = firstDateOfMonth.getDay();     // 0 (So) bis 6 (Sa)

var firstDateOfWeek = new Date(firstDateOfMonth);    // kopiere firstDateOfMonth

firstDateOfWeek.setDate(                             // verschiebe das Date-Objekt
    firstDateOfWeek.getDate() +                      // vorwärts um die Anzahl von
    (firstDayOfMonth ? 7 - firstDayOfMonth : 0)      // Tagen, die benötigt werden, um zu
);                                                   // Sonntag zu gehen, falls erforderlich

firstDateOfWeek.setDate(                             // verschiebe das Date-Objekt
    firstDateOfWeek.getDate() +                      // vorwärts um die Anzahl von
    7 * (week - 1)                                   // erforderlichen Wochen (Woche - 1)
);

var dateNumbersOfMonthOnWeek = [];                   // Ausgabearray der Datumsnummern
var datesOfMonthOnWeek = [];                         // Ausgabearray der Dates

for (var i = 0; i < 7; i++) {                        // für sieben Tage...

    dateNumbersOfMonthOnWeek.push(                   // füge die Datumsnummer hinzu
        firstDateOfWeek.getDate());                  // ans Ende des Arrays

    datesOfMonthOnWeek.push(                         // füge das Date-Objekt hinzu
        new Date(+firstDateOfWeek));                 // ans Ende des Arrays

    firstDateOfWeek.setDate(
        firstDateOfWeek.getDate() + 1);              // gehe zum nächsten Tag

}

dann

  • dateNumbersOfMonthOnWeek hat die Datumsnummern dieser Woche.
  • datesOfMonthOnWeek hat die Date-Objekte dieser Woche.

Auch wenn dies möglicherweise überdimensioniert erscheint, ist vieles davon erforderlich, um es in allen Situationen zu ermöglichen, wie wenn die Datumsnummern in einen anderen Monat übergehen. Ich bin mir sicher, dass es optimiert werden könnte, um weniger umfangreich zu sein.

0 Stimmen

Das ist wirklich gut. Können Sie mir mehr über setDate erklären, wenn das für Sie okay ist. Entschuldigung, ich bin ein Anfänger in JavaScript. Vielen Dank.

1 Stimmen

Date::setDate akzeptiert ein Argument, nämlich eine 'Datumszahl', um das Datum des Objekts im Monat zu ändern. Es ist intelligent und nützlich in dem Sinne, dass das Übergeben des Werts 35 das Datum auf den nächsten Monat ändert, ein paar Tage später, anstatt einen Fehler zu verursachen.

0 Stimmen

Oh, ich verstehe, ein Problem besteht jedoch darin, dass einige Wochentage in andere Monate fallen. Ich werde versuchen, es selbst zu beheben. Danke nochmals.

0voto

Tetaxa Punkte 4347

Normalerweise verwende ich Datejs für Datumsmanipulationen in js. Ich würde es so machen:

var ersterWochentag = new Date(jahr,monat-1,1).moveToDayOfWeek(0,-1).addWeeks(woche-1);
var letzterWochentag = ersterWochentag.addDays(6);

0voto

RobG Punkte 133037

Vorausgesetzt, dass die erste Woche des Monats diejenige ist, die den ersten Tag des Monats enthält, gibt die folgende Funktion das Datum des ersten Wochentags zurück, wenn das Jahr, der Monat und die Wochennummer angegeben sind:

/* 
   Eingabejahr, Monat und Wochennummer ab 1
   Gibt den ersten Tag der Woche (Sonntag) zurück, wobei
   die erste Woche diejenige ist, die den 1. des Monats enthält
*/
function getFirstDayOfWeek(y, m, w) {
  var d = new Date(y, --m);
  d.setDate(--w * 7 - d.getDay() + 1);
  return d;
}

alert(getFirstDayOfWeek(2011,3, 2)); // So 06. März 2011

Um den Rest der Tage zu erhalten, müssen Sie nur 6 Mal eine Schleife durchlaufen und jedes Mal eins zum Datum hinzufügen, z.B.

function getWeekDates(y, m, w) {
  var d = getFirstDayOfWeek(y, m, w)
  var week = [new Date(d)];
  var i = 6;
  while (i--) {
    week.push(new Date(d.setDate(d.getDate() + 1)));
  }
  return week;
}

// Zeige die Woche der Termine
var week = getWeekDates(2011,3, 2);
for (var i=0, iLen=week.length; i

0 Stimmen

Vielen Dank für deine Antwort, RobG... ich bin jetzt wirklich in Eile. Ich hatte keine Zeit, deinen Code zu überprüfen.

0 Stimmen

@RobG: Ich habe deinen Code getestet und ein Problem festgestellt. Ich habe auch die Konsole in Chrome verwendet, um die Ergebnisse anzusehen. Details: Wochennummer: 5 Woche: Sonne 26. Januar 2014 00:00:00 GMT+0700 (Südostasien Normalzeit), Montag 27. Januar 2014 00:00:00 GMT+0700 (Südostasien Normalzeit),..., Samstag 01. Februar 2014 00:00:00 GMT+0700 (Südostasien Normalzeit) Wochennummer: 6 Woche: Sonne 02. März 2014 00:00:00 GMT+0700 (Südostasien Normalzeit), Montag 03. März 2014 00:00:00 GMT+0700 (Südostasien Normalzeit),..., Samstag 08. März 2014 00:00:00 GMT+0700 (Südostasien Normalzeit) Es gibt ein Problem von 01.02.2014 (Woche 5) bis 02.03.2014 (Woche 6). Bitte beheben Sie es.

0voto

Lachezar Raychev Punkte 2003

Eine kleine Änderung der ersten Antwort, die für mich funktioniert hat:

year = 2014;
week = 31;//week number is 31 for the example, could be 120.. it will just jump trough years
// get the date for the first day of the year               
var firstDateOfYear = new Date(year,0,1);
// set the date to the number of days for the number of weeks
firstDateOfYear.setDate(firstDateOfYear.getDate()+(7 * (week-1))); 
// get the number of the day in the week 0 (Sun) to 6 (Sat)
var counter = firstDateOfYear.getDay();

//make sunday the first day of the week
for(i=0;i

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X