Get week of year in JavaScript like in PHP

后端 未结 19 1359
南方客
南方客 2020-11-22 02:38

How do I get the current weeknumber of the year, like PHP\'s date(\'W\')?

It should be the ISO-8601 week number of year, weeks starting

19条回答
  •  被撕碎了的回忆
    2020-11-22 02:58

    This week number thing has been a real pain in the a**. Most of scripts around the net didn't work for me. They worked most of time but all of them broke in some point, especially when year changed and last week of the year was suddenly next year's first week etc. Even Angular's date filter showed incorrect data (it was 1st week of next year, angular gave week 53).

    Note: Examples are designed to work with European weeks (Mon first)!

    getWeek()

    Date.prototype.getWeek = function(){
    
        // current week's Thursday
        var curWeek = new Date(this.getTime());
            curWeek.setDay(4);
    
        // Get year's first week's Thursday
        var firstWeek = new Date(curWeek.getFullYear(), 0, 4);
            firstWeek.setDay(4);
    
        return (curWeek.getDayIndex() - firstWeek.getDayIndex()) / 7 + 1;
    };
    

    setDay()

    /**
    * Make a setDay() prototype for Date
    * Sets week day for the date
    */
    Date.prototype.setDay = function(day){
    
        // Get day and make Sunday to 7
        var weekDay = this.getDay() || 7;
        var distance = day - weekDay;
        this.setDate(this.getDate() + distance);
    
        return this;
    }
    

    getDayIndex()

    /*
    * Returns index of given date (from Jan 1st)
    */
    
    Date.prototype.getDayIndex = function(){
        var start = new Date(this.getFullYear(), 0, 0);
        var diff = this - start;
        var oneDay = 86400000;
    
        return Math.floor(diff / oneDay);
    };
    

    I have tested this and it seems to be working very well but if you notice a flaw in it, please let me know.

提交回复
热议问题