如何在jquery

时间:2017-05-15 14:55:21

标签: javascript jquery datetime

我有以下代码:

//var data is an array of objects
var dateRegex = /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})/;
var dataDateFields = [];
$.each(data[0], function (name, value) {
    if (jQuery.type(value) === "string") {
        if (value.match(dateRegex)) {
            dataDateFields.push(name);
        }
    }
});
if (dataDateFields.length > 0) {
    $.each(data, function (e) {
        $.each(this, function(name, value) {
            if (jQuery.inArray(name, dataDateFields) !== -1) {
                var tempDate = new Date(value);
                this.value = tempDate;
            }
        });
    });
}

这段代码的作用是将数据传递给它,它是来自db中表的对象数组。然后,它搜索第一个对象的字段,并获取其中包含数据的列的名称,这些列看起来像日期时间字段。它将这些字段的名称保存在数组中。然后它遍历数据中的每一行,每个列都有一个datetime字段名称,它将该数据从字符串转换为Date类型。

我遇到的问题是代码的最后一部分。代码:

if (jQuery.inArray(name, dataDateFields) !== -1) {
            var tempDate = new Date(value);
            this.value = tempDate;
        }

代码进入if语句,它使用提供的字符串中的Date变量正确填充tempDate。我会想那个

this.value = tempDate;
然后

将使用新Date覆盖先前存储的日期时间字符串。但事实并非如此。当我全部循环查看数据后,具有日期时间字符串的字段仍然相同,它没有使用转换后的Date数据填充这些字段。 PS。检查时的tempDate始终正确转换为日期类型并且格式正确。

有人知道我怎么能做到这一点吗?另外,有什么更简单的方法可以做我正在做的事情吗?这段代码假设我不知道将向我传递哪些数据,或者它将包含哪些字段 - 我只知道它可能包含字符串格式的日期时间字段,因此,为了稍后进行的计算,我需要检查每个字段,查看它是否看起来像日期,然后将该字段名称的所有字符串转换为日期类型。

1 个答案:

答案 0 :(得分:0)

想出来:

$.each(data[0], function (name, value) {
    if (jQuery.type(value) === "string") {
        if (value.match(dateRegex)) {
            dataDateFields.push(name);
        }
    }
});
if (dataDateFields.length > 0) {
    for (var i = 0; i < data.length; i++) {
        $.each(data[i], function (name, value) {
            if (jQuery.inArray(name, dataDateFields) !== -1) {
                var date = value.split("T");
                date = date[0];
                date = date.split("-");
                var year = date[0];
                var month = date[1];
                var day = date[2];
                var tempDate = new Date(year, month, day);
                eval("data[i]."+name+" = tempDate;");
            }
        });
    }
}

需要for循环而不是foreach。