自定义JS数据对象以适应

时间:2014-06-20 08:16:26

标签: javascript date

我想知道是否可以将e.data.date自定义为更适合我需要的字符串输出。目前,e.data.date会输出为Thu Jun 2012 2014 2000:00:00 GMT+0100 (BST),但理想情况下我想要复制20140607的事件开始和结束日期输入。

e.data.datedate object

我可以使用e.data.date.getUTCDate()来获取月份,但要获得所需的20141102输出,例如包括年,月和日期,似乎没有getter方法......

有什么想法吗?

2 个答案:

答案 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/


注意这些都是方便的方法。您可以通过使用自定义函数和回调来实现完全相同的效果。