Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中是否有方法使用year&;创建日期对象;ISO周数?_Javascript_Date_Week Number - Fatal编程技术网

javascript中是否有方法使用year&;创建日期对象;ISO周数?

javascript中是否有方法使用year&;创建日期对象;ISO周数?,javascript,date,week-number,Javascript,Date,Week Number,我正在尝试创建一个谷歌注释的时间线viz。为此,我需要输入事件的日期。我仅有的信息是该活动的年份和ISO周数。Javascript中有没有一种方法可以只使用年和周数来创建日期对象?我在谷歌上搜索了一下,但没有找到任何可行的解决方案 谢谢你的帮助 有趣的问题。以下是我的解决方案: var week2date = (function() { var weekToDate = { // last week number in the month: [first date of

我正在尝试创建一个谷歌注释的时间线viz。为此,我需要输入事件的日期。我仅有的信息是该活动的年份和ISO周数。Javascript中有没有一种方法可以只使用年和周数来创建日期对象?我在谷歌上搜索了一下,但没有找到任何可行的解决方案


谢谢你的帮助

有趣的问题。以下是我的解决方案:

var week2date = (function() {
    var weekToDate = {
        // last week number in the month: [first date of each week]
        4:  [4, 11, 18, 25], // jan
        8:  [1, 8, 15, 22], // feb
        13: [1, 8, 15, 22, 29], // march
        17: [5, 12, 19, 26], // etc ...
        22: [3, 10, 17, 24, 31],
        26: [7, 14, 21, 28],
        30: [5, 12, 19, 26],
        35: [2, 9, 16, 23, 30],
        39: [6, 13, 20, 27],
        43: [4, 11, 18, 25],
        48: [1, 8, 15, 22, 29],
        52: [6, 13, 20, 27]
    };

    return function(week, year) {
        if ( week > 52 || week < 01 ) { return false; }

        var d = new Date(),
            lastw = 0,
            month = 0;

        for ( var w in weekToDate ) {
            if ( !weekToDate.hasOwnProperty(w) ) { continue; }
            if ( w >= week ) {
                break;
            }
            lastw = w;
            ++month;
        }

        d.setFullYear(year || d.getFullYear(), month, weekToDate[w][week - lastw - 1]);
        return d;
    }
})();
输出:

Mon Mar 29 2010 18:51:28 GMT-0700 (PST) {}
Tue Sep 20 1983 18:51:28 GMT-0700 (PST) {}

我过去常常得到日期信息。

ISO周从周一开始

如果1月1日在星期一、星期二、星期三或星期四,则在第01周。 如果1月1日是星期五、星期六或星期日,则是前一年的第52周或第53周

Date.weekofYear= function(s){
    var yw= s.split(/\D+0?/),
    weeks= 7*yw[1]-7,
    date1= new Date(yw[0], 0, 1),
    day1= date1.getDay(),
    incr= (day1> 0 && day1<5)? -1: 1;
    if(yw[2]) weeks+= (+yw[2])-1;// optional day in week

    while(date1.getDay()!= 1){
        date1.setDate(date1.getDate()+incr);
    }
    date1.setDate(date1.getDate()+weeks);
    return date1;
}

Date.weekofYear('2010-20').toLocaleDateString()
// (use UTC methods to start the weeks on Greenwich instead of local time)
/*  returned value: (String)
Monday, May 17, 2010
*/
Date.weekofYear=函数{
var yw=s.split(/\D+0?/),
周=7*yw[1]-7,
date1=新日期(yw[0],0,1),
day1=date1.getDay(),

incr=(day1>0&&day1我支持s@kennebec先生的回答,但由于我还不能发表评论,我想补充一点,表示一年中的一周的ISO符号是
yyyy Www
。例如:
2000-W01
。请注意周填充。

啊,但也有一种称为第53周的符号,请参见kennebec的帖子。
Date.weekofYear= function(s){
    var yw= s.split(/\D+0?/),
    weeks= 7*yw[1]-7,
    date1= new Date(yw[0], 0, 1),
    day1= date1.getDay(),
    incr= (day1> 0 && day1<5)? -1: 1;
    if(yw[2]) weeks+= (+yw[2])-1;// optional day in week

    while(date1.getDay()!= 1){
        date1.setDate(date1.getDate()+incr);
    }
    date1.setDate(date1.getDate()+weeks);
    return date1;
}

Date.weekofYear('2010-20').toLocaleDateString()
// (use UTC methods to start the weeks on Greenwich instead of local time)
/*  returned value: (String)
Monday, May 17, 2010
*/