我想知道是否可以将e.data.date
自定义为更适合我需要的字符串输出。目前,e.data.date
会输出为Thu Jun 2012 2014 2000:00:00 GMT+0100 (BST)
,但理想情况下我想要复制20140607
的事件开始和结束日期输入。
e.data.date
是date object。
我可以使用e.data.date.getUTCDate()
来获取月份,但要获得所需的20141102
输出,例如包括年,月和日期,似乎没有getter方法......
有什么想法吗?
答案 0 :(得分:4)
Date.prototype.GetCustomFormat = function ()
{
return this.getFullYear()+""+getInTwoDigitFormat(Number(this.getMonth())+1)+""+getInTwoDigitFormat(Number(this.getDay())-1);
};
function getInTwoDigitFormat(val)
{
return val < 10 ? '0' + val : val;
}
您可以将其称为new Date().GetCustomFormat();
2014年4月24日更新:
Date.prototype.format = function (format)
{
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S": this.getMilliseconds()
};
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] :
("00" + o[k]).substr(("" + o[k]).length));
return format;
};
通过这种方式,您可以比实现自定义库更快地格式化任何日期。 例如:
x=new Date();
Date {Wed Sep 24 2014 14:30:22 GMT+0300 (GTB Standard Time)}
x.format('M')
"9"
x.format('d')
"24"
x.format('d M')
"24 9"
x.format('d:M')
"24:9"
x.format('d:MM')
"24:09"
x.format('d:MM:yy')
"24:09:14"
x.format('d:MM:yyy')
"24:09:014"
答案 1 :(得分:1)
在@HellBaby的答案上稍微扩展一下:
您可以覆盖任何默认的JS对象属性。您可以覆盖toString
原型中的Date
函数;这样,任何自动将日期解析为字符串的地方都将使用您的自定义函数:
Date.prototype.toString = function() {
return "Custom formatted date string";
};
例如。 http://jsfiddle.net/x8f3S/
现在,请记住以上内容将覆盖脚本中所有日期的toString
函数。如果您只想覆盖一个特定日期对象,可以使用Object.defineProperty
,如下所示:
Object.defineProperty(e.data.date, "toString", {
value: function() {
return "Custom formatted date string";
}
});
演示:http://jsfiddle.net/x8f3S/1/
您甚至可以更进一步,并为date
内设置的每个e.data
定义:
Object.defineProperty(e.data, "date", {
get: function() { /*...*/ }
set: function(customDate) { /* modify customDate's prototype here */ }
}
以下是最后一种方法的演示:http://jsfiddle.net/x8f3S/2/
注意这些都是方便的方法。您可以通过使用自定义函数和回调来实现完全相同的效果。