Datum aus Jahr und Woche und Tag der Woche berechnen

lano

Aktives Mitglied
Moin.

Ich habe ein Jahr. 2008
Und eine Woche. Die 23.
Und den Tag der Woche. 2, also Dienstag.

Wie kann ich daraus ein Datum berechnen in der Form "Dienstag der 3.4.2008" ?
 
Und den Tag der Woche. 2, also Dienstag.
Und Sonntag ist dann 7 (oder ist Sonntag 0)?

// EDIT: eingekürzt
Javascript:
function getDateOfISOWeek(y, cw, wd) {
  var dt = new Date(y, 0, 1 + (cw - 1) * 7);
  dt.setDate(dt.getDate() - dt.getDay() + wd + (dt.getDay() <= 4 ? 0 : 7));
  return ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"][dt.getDay()] + ", der " + dt.getDate() + "." + (dt.getMonth() + 1) + "." + dt.getYear();
}
Ergibt für getDateOfISOWeek(2008, 23, 2);
Dienstag, der 3.6.2008
was auch den Tatsachen entspricht. Du wolltest uns mit dem 3.4. testen, oder ? ;)

Abgeleitet von https://stackoverflow.com/questions/16590500/javascript-calculate-date-from-week-number
 
Zuletzt bearbeitet:
Ich meine das Sonntag 7 ist.
Hab ich mir gedacht. Dann passt das so. (Normalerweise wäre Sonntag 0, so auch bei .getDay().)

Ich musste fürs Jahr noch 1900 aufaddieren.
Hehe, kommt drauf an wohin der Beginn der Epoche bei deiner Datenbasis gelegt wurde. 1900 hast du bspw. bei struct tm::tm_year in C wo (wie auch in JS) die Monate dazu noch im Bereich 0..11 liegen. Üblich wäre aber auch der 1.1.1970 als Beginn der Epoche.

Ach übrigens, einer der Kommentatoren auf SO weist darauf hin, dass es Probleme beim Übergang Sommer- <--> Winterzeit geben könnte und schlägt
var dt = new Date(Date.UTC(y, 0, 1 + (cw - 1) * 7));
vor, um das zu vermeiden.
 
Zuletzt bearbeitet:
So ganz komm ich da nicht mit.
Ich hab das jetzt so:
Code:
function getDateOfISOWeek(y, cw, wd) {
      var dt = new Date(y, 0, 1 + (cw - 1) * 7);
      dt.setDate(dt.getDate() - dt.getDay() + wd + (dt.getDay() <= 4 ? 0 : 7));
      return ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"][dt.getDay()] + ", den " + dt.getDate() + "." + (dt.getMonth() + 1) + "." + (dt.getYear() +1896) ;
}

function submitForm(){

        var year = document.getElementById("in").value.substr(0, 1).toUpperCase();
        var week = document.getElementById("in").value.substr(1, 2);
        var day = document.getElementById("in").value.substr(3, 1);


        if(year == "S") { year = 2004; }
        else if(year == "T") { year = 2005; }
        else if(year == "U") { year = 2006;}
        else if(year == "V") { year = 2007;}
        else if(year == "W") {year = 2008;}
        else if(year == "X") {year = 2009;}
        else if(year == "A") {year = 2010;}
        else if(year == "B") {year = 2011;}
        else if(year == "C") {year = 2012;}
        else if(year == "D") {year = 2013;}
        else if(year == "E") {year = 2014;}
        else if(year == "F") {year = 2015;}
        else if(year == "H") {year = 2016;}
        else if(year == "J") {year = 2017;}
        else if(year == "K") {year = 2018;}
        else if(year == "L") {year = 2019;}
        else if(year == "M") {year = 2020;}
        else if(year == "N") {year = 2021;}
        else if(year == "P") {year = 2022;}
        else if(year == "R") {year = 2023;}
        else {
            document.getElementById("myDIV").innerHTML = "Das Herstellungsdatum konnte leider nicht ermittelt werden.";
            document.getElementById('information').style.display='block'
         return;
        }

        document.getElementById("myDIV").innerHTML = "Die Fritz!Box wurde am " + getDateOfISOWeek(year,week,day) + " hergestellt.";
        document.getElementById('information').style.display='block'
}

Hab aber so das gefühl das mir hin und wieder was falsches angezeigt wird.
 
Hab aber so das gefühl das mir hin und wieder was falsches angezeigt wird.
Ließe sich ja leicht verifizieren. Dazu müsstest du aber mal schreiben, wie die Strings aussehen die du da ausliest. Und apropos Strings - das was numerisch sein soll entsprechend zu konvertieren, könnte sehr sinnvoll sein. Insbesondere wenn du vorangestellte Nullen drin hast. Dann wäre parseInt() mit Radix 10 quasi obligatorisch um nicht implizit oktal zu konvertieren.
var week = parseInt(document.getElementById("in").value.substr(1, 2), 10);
 
Zurück
Oben Unten