getDay()是否符合ISO 8601标准?

时间:2013-01-11 01:34:10

标签: javascript

我在弄清楚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,而不是星期天。

有没有人有这方面的经验?你能否澄清一下,你会建议改写方法,使星期一成为一周的第一天吗?

3 个答案:

答案 0 :(得分:3)

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

或扩展Date原型:

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

然后使用

var n = weekday[(new Date()).getISODay()];

答案 1 :(得分:2)

如果您想使用日期格式(工作日实际上表示为数字,例如工作日),工作日的表示方式才有意义。 YYYY-Www-D格式,或者如果您想获得特定日期的周数。

否则,工作日的数字表示方式无关紧要。星期一仍然是星期一。

答案 2 :(得分:1)

我能找到的唯一来源是哪个州的星期几应该是Wikipediathis page。两者都建议星期几应为17,并从星期一开始。

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

相关问题