wake-up-neo.net

Woche des Monats erhalten

Wie kann ich die Wochennummer des Monats mit Javascript/Jquery ermitteln?

ZB: 

Erste Woche: 5. Juli 2010./Wochennummer = Erster Montag

Vorherige Woche: 12. Juli 2010./Wochennummer = Zweiter Montag

Aktuelles Datum: 19. Juli 2010./Wochennummer = Dritter Montag

Nächste Woche: 26. Juli 2010./Wochennummer = Letzter Montag

17
Prasad

function weekAndDay(date) {
    
    var days = ['Sunday','Monday','Tuesday','Wednesday',
                'Thursday','Friday','Saturday'],
        prefixes = ['First', 'Second', 'Third', 'Fourth', 'Fifth'];

    return prefixes[Math.floor(date.getDate() / 7)] + ' ' + days[date.getDay()];

}

console.log( weekAndDay(new Date(2010,7-1, 5)) ); // => "First Monday"
console.log( weekAndDay(new Date(2010,7-1,12)) ); // => "Second Monday"
console.log( weekAndDay(new Date(2010,7-1,19)) ); // => "Third Monday"
console.log( weekAndDay(new Date(2010,7-1,26)) ); // => "Fourth Monday"
console.log( weekAndDay(new Date()) );

Das Hinzufügen der Möglichkeit, Last ... zu haben, kann mehr Hacken erfordern ...

1
James

Dies ist eine alte Frage, aber die Antworten sind einfach falsch. Dies ist meine browserübergreifende Lösung:

    Date.prototype.getWeekOfMonth = function(exact) {
        var month = this.getMonth()
            , year = this.getFullYear()
            , firstWeekday = new Date(year, month, 1).getDay()
            , lastDateOfMonth = new Date(year, month + 1, 0).getDate()
            , offsetDate = this.getDate() + firstWeekday - 1
            , index = 1 // start index at 0 or 1, your choice
            , weeksInMonth = index + Math.ceil((lastDateOfMonth + firstWeekday - 7) / 7)
            , week = index + Math.floor(offsetDate / 7)
        ;
        if (exact || week < 2 + index) return week;
        return week === weeksInMonth ? index + 5 : week;
    };
    
    // Simple helper to parse YYYY-MM-DD as local
    function parseISOAsLocal(s){
      var b = s.split(/\D/);
      return new Date(b[0],b[1]-1,b[2]);
    }

    // Tests
    console.log('Date          Exact|expected   not exact|expected');
    [   ['2013-02-01', 1, 1],['2013-02-05', 2, 2],['2013-02-14', 3, 3],
        ['2013-02-23', 4, 4],['2013-02-24', 5, 6],['2013-02-28', 5, 6],
        ['2013-03-01', 1, 1],['2013-03-02', 1, 1],['2013-03-03', 2, 2],
        ['2013-03-15', 3, 3],['2013-03-17', 4, 4],['2013-03-23', 4, 4],
        ['2013-03-24', 5, 5],['2013-03-30', 5, 5],['2013-03-31', 6, 6]
    ].forEach(function(test){
      var d = parseISOAsLocal(test[0])
      console.log(test[0] + '        ' + 
      d.getWeekOfMonth(true) + '|' + test[1] + '                  ' +
      d.getWeekOfMonth() + '|' + test[2]); 
    });

Sie müssen es nicht direkt auf den Prototyp setzen, wenn Sie nicht möchten. In meiner Implementierung bedeutet 6 "Letzter", nicht "Sechster". Wenn Sie möchten, dass immer die tatsächliche Woche des Monats zurückgegeben wird, übergeben Sie einfach true.

EDIT: Dieser Fehler wurde behoben, um 5 & 6-Wochen-Monate zu behandeln. Meine "Unit-Tests" können Sie gerne abspalten: http://jsfiddle.net/OlsonDev/5mXF6/1/ .

26
Olson.dev
week_number = 0 | new Date().getDate() / 7
4
Ishaan Puniani

Auch mit diesem Thema zu kämpfen - danke an Olson.dev! Ich habe seine Funktion etwas verkürzt, wenn jemand interessiert ist:

// returns week of the month starting with 0
Date.prototype.getWeekOfMonth = function() {
  var firstWeekday = new Date(this.getFullYear(), this.getMonth(), 1).getDay();
  var offsetDate = this.getDate() + firstWeekday - 1;
  return Math.floor(offsetDate / 7);
}
3
Lord Midi

Dies ist einige Jahre später, aber ich musste diese Funktionalität in letzter Zeit verwenden, und für bestimmte Daten in den Jahren 2016/2020 (z. B. der 31. Januar) ist der Code hier nicht verfügbar.

Es ist auf keinen Fall das effizienteste, aber hoffentlich hilft es jemandem, da es das einzige ist, was ich für diese Jahre zusammen mit jedem zweiten Jahr arbeiten könnte.

Date.prototype.getWeekOfMonth = function () {
    var dayOfMonth = this.getDay();
    var month = this.getMonth();
    var year = this.getFullYear();
    var checkDate = new Date(year, month, this.getDate());
    var checkDateTime = checkDate.getTime();
    var currentWeek = 0;

    for (var i = 1; i < 32; i++) {
        var loopDate = new Date(year, month, i);

        if (loopDate.getDay() == dayOfMonth) {
            currentWeek++;
        }

        if (loopDate.getTime() == checkDateTime) {
            return currentWeek;
        }
    }
};
3
Chris Dixon

Ich denke das funktioniert. Es gibt die Woche des Monats zurück, beginnend bei 0:

var d = new Date();
var date = d.getDate();
var day = d.getDay();

var weekOfMonth = Math.ceil((date - 1 - day) / 7);
2
Eric
function getWeekOfMonth(date) {
  const startWeekDayIndex = 1; // 1 MonthDay 0 Sundays
  const firstDate = new Date(date.getFullYear(), date.getMonth(), 1);
  const firstDay = firstDate.getDay();

  let weekNumber = Math.ceil(`enter code here`(date.getDate() + firstDay) / 7);
  if (startWeekDayIndex === 1) {
    if (date.getDay() === 0 && date.getDate() > 1) {
      weekNumber -= 1;
    }

    if (firstDate.getDate() === 1 && firstDay === 0 && date.getDate() > 1) {
      weekNumber += 1;
    }
  }
  return weekNumber;
}

Ich hoffe das funktioniert. Bis 2025 getestet

0
Mow

Ich konnte gerade einen einfacheren Code finden, um die Anzahl der Wochen für einen bestimmten Monat eines Jahres zu berechnen.

y == Jahr zum Beispiel {2012} m == ist ein Wert von {0 - 11}

function weeks_Of_Month( y, m ) {
    var first = new Date(y, m,1).getDay();      
    var last = 32 - new Date(y, m, 32).getDate(); 

    // logic to calculate number of weeks for the current month
    return Math.ceil( (first + last)/7 );   
}
0
Prasad

Nachdem ich alle Antworten gelesen hatte, fand ich einen Weg, der weniger CPU verbraucht als die anderen und jeden Tag eines jeden Monats eines jeden Jahres arbeitet. Hier ist mein Code:

function getWeekInMonth(year, month, day){

    let weekNum = 1; // we start at week 1

    let weekDay = new Date(year, month - 1, 1).getDay(); // we get the weekDay of day 1
    weekDay = weekDay === 0 ? 6 : weekDay-1; // we recalculate the weekDay (Mon:0, Tue:1, Wed:2, Thu:3, Fri:4, Sat:5, Sun:6)

    let monday = 1+(7-weekDay); // we get the first monday of the month

    while(monday <= day) { //we calculate in wich week is our day
        weekNum++;
        monday += 7;
    }

    return weekNum; //we return it
}

Ich hoffe das kann helfen.

0

Ich denke, Sie möchten weekOfMonth verwenden, damit es 1-4 oder 1-5 Wochen des Monats gibt. Ich habe das gleiche Problem damit gelöst:

var dated = new Date();
var weekOfMonth = (0 | dated.getDate() / 7)+1;
0
user3473474
function weekNumberForDate(date){

    var janOne = new Date(date.getFullYear(),0,1);
    var _date = new Date(date.getFullYear(),date.getMonth(),date.getDate());
    var yearDay = ((_date - janOne + 1) / 86400000);//60 * 60 * 24 * 1000
    var day = janOne.getUTCDay();
    if (day<4){yearDay+=day;}
    var week = Math.ceil(yearDay/7);

   return week;
}

Anscheinend ist die erste Woche des Jahres die Woche, die den ersten Donnerstag des Jahres enthält. 

Ohne den UTCDay zu berechnen, war die zurückgegebene Woche eine Woche vor dem, was sie hätte sein sollen. Nicht zuversichtlich, dass dies nicht verbessert werden kann, scheint aber vorerst zu funktionieren.

0
Johnny Rockex

Bitte versuchen Sie es unterhalb der Funktion. Dieses Datum berücksichtigt das Startdatum der Woche als Montag und das Enddatum der Woche als Sonntag.

getWeekNumber(date) {
    var monthStartDate =new Date(new Date().getFullYear(), new 
         Date().getMonth(), 1);
    monthStartDate = new Date(monthStartDate);
    var day = startdate.getDay();
    date = new Date(date);
    var date = date.getDate();
    return Math.ceil((date+ day-1)/ 7);
}
0
Jijo Krishnan

Dies wird nicht nativ unterstützt.

Sie können Ihre eigene Funktion dafür rollen, indem Sie vom ersten Tag des Monats aus arbeiten

var currentDate = new Date();
var firstDayOfMonth = new Date( currentDate.getFullYear(), currentDate.getMonth(), 1 );

Und dann den Wochentag dieses Datums bekommen:

var firstWeekday = firstDayOfMonth.getDay();

..., der Ihnen einen auf Null basierenden Index von 0-6 gibt, wobei 0 der Sonntag ist.

0
David Hedlund
function getWeekOfMonth(date) {

  var nth = 0; // returning variable.
  var timestamp = date.getTime(); // get UTC timestamp of date.
  var month = date.getMonth(); // get current month.
  var m = month; // save temp value of month.

  while( m == month ) {  // check if m equals our date's month.
    nth++; // increment our week count.
    // update m to reflect previous week (previous to last value of m).
    m = new Date(timestamp - nth * 604800000).getMonth();
  }

  return nth;

}
0
dzimney