Javascript日期对象和Date.prototype自定义

时间:2014-07-03 13:50:15

标签: javascript jquery date

我正在使用日历插件,该插件有一些回调事件,允许您自定义当用户点击日期时发生的事情等。对我来说,设置此项的一种方法是以下内容:

onDayClick: function(e) {
    window.location.href = 'http://www.testdomain.com/events/day/' + e.data.date;
}

.datedate object因此,如果点击,例如,这将返回:

http://www.testdomain.com/events/day/Thu Jun 2012 2014 2000:00:00 GMT+0100 (BST)

我需要的是所需的输出:

http://www.testdomain.com/events/day/2014/07/17/并查看日期对象文档,我认为这相当容易。

Date.prototype.GetCustomFormat = function() {
    return this.getFullYear()+'/'+getInTwoDigitFormat(this.getMonth())+'/'+getInTwoDigitFormat(this.getDate());
};
function getInTwoDigitFormat(val) {
    return val < 10 ? '0' + val : val;
}

onDayClick: function(e) {
    window.location.href = 'http://www.testdomain.com/events/day/' + e.data.date.GetCustomFormat();
}

但是,当点击时,这会带来正确的一年......但错误的月份是1,错误的日期是几天。奇怪的。所以我添加了一些offets并添加了一个UTCMonth ......

return this.getFullYear()+'/'+getInTwoDigitFormat(this.getUTCMonth()+1)+'/'+getInTwoDigitFormat(this.getDate());

这似乎现在有效。但是,如果我有一个事件落在第一个...它使用上个月的第一个。所以,如果我点击7月1日,它将返回6月1日。

我想我正在抓住它......但是这里和那里有一些奇怪的结果。谁能找到我出错的地方并把我弄错了?

由于

1 个答案:

答案 0 :(得分:1)

对此的解释很简单:因为您在UTC的前一小时,在7月1日的午夜,UTC仍然在六月!这就是为什么它使用UTC月份输出 June 1st 的原因。使用UTC月而不是UTC年份和日期并没有多大意义,所以只需使用常规月份:

Date.prototype.GetCustomFormat = function() {
    return this.getFullYear()+'/'+getInTwoDigitFormat(this.getMonth()+1)+'/'+getInTwoDigitFormat(this.getDate());
};
var testerDate = new Date(Date.parse("Thu Jun 1 2012 00:00:00 GMT+0100"))
testerDate.GetCustomFormat() //The output of this depends on your time zone: It'll be 2012/06/01 if in or ahead of GMT+0100, but otherwise, it'll be 2012/05/31.