5

getDay()JavaScript のメソッド ( http://www.w3schools.com/jsref/jsref_getday.asp ) が ISO 8601 に準拠しているかどうかを判断するのに本当に苦労しています。

getDay()0日曜日、1月曜日などに戻ります。

ドキュメントでは、次のような曜日名へのマッピングを推奨しています。

var weekday=new Array(7);
weekday[0]="Sunday";
weekday[1]="Monday";
weekday[2]="Tuesday";
...
var n = weekday[(new Date()).getDay()];

ISO 規格が月曜日を週の最初の曜日として定義していることだけがわかります。これは、日曜日ではなく、月曜日が 0 であることを意味すると思います。

誰もこれについて経験がありますか?月曜日を週の最初の日にするメソッドをオーバーライドすることをお勧めしますか?

4

3 に答える 3

5
var weekday=new Array(7);
weekday[0]="Monday";
weekday[1]="Tuesday";
weekday[2]="Wednesday";
...
var n = weekday[((new Date()).getDay() + 6) % 7 + 1];

または Date プロトタイプを拡張します。

Date.prototype.getISODay = function(){ return (this.getDay() + 6) % 7 + 1; }

そして使用する

var n = weekday[(new Date()).getISODay()];
于 2013-01-11T01:41:50.817 に答える
2

YYYY-Www-D曜日が実際に数値で表される日付形式を使用する場合、または特定の日付の週番号を取得する場合にのみ、曜日の表現方法が重要になります。

それ以外の場合は、曜日が数値でどのように表されるかは問題ではありません。月曜日はまだ月曜日です。

于 2013-01-11T01:46:47.957 に答える
2

曜日がどの州であるべきかを見つけることができた唯一の情報源は、ウィキペディアこのページでした。どちらも、曜日番号が1toで、 Monday7から始まることを示唆しています。

UTC とリテラルを使用して名前を取得することをお勧めしますが、私はic3b3rgの拡張の提案を支持します。Date.prototype次の例では、オブジェクトと匿名関数を使用しているため、名前を定義する必要があるのは一度だけです。

(function () {
    var dayNames = {1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday', 7: 'Sunday'};
    // Local time
    Date.prototype.getISODay = function () {return this.getDay() || 7;};
    Date.prototype.getISODayName = function () {return dayNames[this.getDay() || 7];};
    // Date.prototype.getDayName = Date.prototype.getISODayName
    // UTC
    Date.prototype.getUTCISODay = function () {return this.getUTCDay() || 7;};
    Date.prototype.getUTCISODayName = function () {return dayNames[this.getUTCDay() || 7];};
    // Date.prototype.getUTCDayName = Date.prototype.getUTCISODayName;
}());

曜日名は ISO 曜日名と同じであるため (英語を想定)、両方が必要な場合はコメントを解除できる行を追加しました。

于 2013-01-11T02:42:00.123 に答える