3

私は数か月前から Stack Overflow を使用していますが、これが最初の投稿です。

週番号と曜日を dd/mm/yyyy 形式に変換する関数が必要です。

使用する必要がある日付値の形式はday/weekNumber. たとえば、3/4320XX 年 10 月 24 日水曜日に変換されます。年の値は現在の年になります。

日の値は 1 (月曜日) から始まります。

インターネット上で多くの関数を見つけました ( thisthisthisなど)。ISO 8601 の日付で動作するものもありますが、これはうまくいかないと思います。そして、私は自分に合ったものをまだ見つけていません。

前もって感謝します、

4

3 に答える 3

2

このソリューションには追加のライブラリを追加する必要がありますが、それだけの価値があると思います。これは、日付と時刻を操作するためのmomentjsライブラリです。積極的にメンテナンスされており、優れたドキュメントがあります。day と weekNumber の値 (この場合は 3 と 43) を取得したら、次のようにします。

function formatInput(day, weekNumber){

    var currentDate = moment(new Date());     // initialize moment to a current date
    currentDate.startOf('year');              // set to Jan 1 12:00:00.000 pm this year
    currentDate.add('w',weekNumber - 1);      // add number of weeks to the beginning of the year (-1 because we are now at the 1st week)
    currentDate.day(day);                     // set the day to the specified day, Monday being 1, Sunday 7

    alert(currentDate.format("dddd, MMMM Do YYYY"));  // return the formatted date string 
    return currentDate.format("dddd, MMMM Do YYYY");
}

このライブラリは後で役立つ可能性があり、日付と時刻の操作や書式設定オプションに関して多くの可能性があると思います。momentjs について書かれた優れたドキュメントもあります。

于 2012-10-24T12:19:20.603 に答える
2

したがって、 と の値が別々にあると仮定する343、現在の年の最初の日にいくつかの簡単な計算を行うことができます。

  • 現在の年の 1 月 1 日を取得する
  • 加算 (43 * 7 + 3)

このようなものかもしれません:

var currentDate = new Date();
var startOfYear = new Date(currentDate.getFullYear(), 0, 1);//note: months start at 0
var daysToAdd = (43 * 7) + 3;
//add days
startOfYear.setDate(startOfYear.getDate() + daysToAdd);

ここに例があります


編集

よく考えてみると、私はあなたの要求に間違っていたと思います。特定の曜日が必要なようです。より良い解決策については、これを確認してください。

問題は、すべてが週の定義に依存することです。今年は日曜日から始まるということは、2012 年 2 月 1 日 (今年の最初の月曜日) が第 2 週の始まりということですか?

私の最新の例は、最初に指定された週の始まりを見つけ、次に指定された日の次の出現を見つけます

于 2012-10-24T08:42:59.740 に答える
1

週の日付を扱うときの ISO によると、週は月曜日から始まり、年の最初の週はその年の最初の木曜日を含む週です。したがって、2012 年の最初の週は 1 月 2 日月曜日に始まり、2013 年の最初の週は 2012 年 12 月 31 日月曜日に始まります。

したがって、3/43 が 43 週目の 3 日目 (ISO 日付 2012-W43-3) である場合、次を使用して日付オブジェクトに変換できます。

function customWeekDateToDate(s) {
  var d, n;
  var bits = s.split('/');

  // Calculate Monday of first week of year this year
  d = new Date();   
  d = new Date(d.getFullYear(),0,1); // 1 jan this year
  n = d.getDay();
  d.setDate(d.getDate() + (-1 * n +( n<5? 1 : 8)));

  // Add days
  d.setDate(d.getDate() + --bits[0] + --bits[1] * 7);

  return d;
}

console.log(customWeekDateToDate('3/43')); // 01 2012-10-24

これは日付を使用することに注意してください。そうしないと、夏時間への切り替えによって間違った日付になる可能性があります。

于 2012-10-24T10:43:49.957 に答える