5

我很难确定 JavaScript 的getDay()方法(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

我能找到的唯一来源是维基百科这个页面。两者都建议星期几数字应该是1星期一7开始。

我支持ic3b3rg的扩展建议Date.prototype,尽管建议使用 UTC 和文字来获取名称。以下示例使用Object和匿名函数,因此名称只需定义一次。

(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 日期名称相同(假设为English),因此我添加了额外的行,如果您想要两者都可以取消注释。

于 2013-01-11T02:42:00.123 回答