我正在使用日历插件,该插件有一些回调事件,允许您自定义当用户点击日期时发生的事情等。对我来说,设置此项的一种方法是以下内容:
onDayClick: function(e) {
window.location.href = 'http://www.testdomain.com/events/day/' + e.data.date;
}
.date
是date 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日。
我想我正在抓住它......但是这里和那里有一些奇怪的结果。谁能找到我出错的地方并把我弄错了?
由于
答案 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.