3

Google の注釈付きタイムライン viz を作成しようとしています。そのためには、イベントの日付を入力する必要があります。私が持っている唯一の情報は、イベントの年と ISO の週番号です。年と週番号だけを使用して Date オブジェクトを作成する Javascript の方法はありますか? 私はそれをグーグルで検索しましたが、実行可能な解決策は見つかりませんでした。

助けてくれてありがとう!

4

3 に答える 3

3

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
*/
于 2010-05-12T02:57:13.750 に答える
1

興味深い問題です。これが私の解決策です:

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;
    }
})();

使用する:

console.log(week2date(13));
console.log(week2date(38, 1983));

出力:

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

ウィキペディアのこの表を使用して、日付情報を取得しました。

于 2010-05-12T01:52:51.430 に答える
0

私は@kennebec夫人の答えに二番目ですが、まだコメントできないので、年の週を表すISO表記はyyyy-Www. 例として: 2000-W01. 週のパディングにも注意してください。

于 2014-09-07T14:20:48.373 に答える