为什么我的 KendoUI 图表在它甚至没有连接的 javascript 变量中更改日期格式?以及如何让它停止
本文关键字:格式 日期 javascript KendoUI 我的 为什么 连接 变量 | 更新日期: 2023-09-27 18:34:55
我从数据库中提取一堆条目,将它们存储在变量中,然后根据各种条件将它们过滤到单独的变量中。一旦我的剑道图表初始化,基于过滤版本,它会以某种方式更改第一个变量中条目的日期格式,但我的代码希望它们采用原始格式。我已经将问题追踪到一行,但我需要那行。
我在 MVC4 中使用 ASP.NET C#。
下面是获取数据的 ajax 调用:
$.ajax({
// gets request logs
url: 'Usage/GetLogs',
dataType: 'json',
success: function (data, status, xhr) {
window.logs = data;
},
error: function (xhr, status, error) {
alert('Error in GetLogs: ' + status);
}
});
这执行良好,logs
数组包含大约 2000 个 Json 对象,每个对象如下所示:
CalcId: 129
Date: "/Date(1373432400000)/"
DateTime: "/Date(1373432621070)/"
Id: 1
ProvId: 2
然后调用以下函数,firstfilter = true
:
function FilterLogs(firstfilter) {
window.currentlogs = [];
for (var i = 0; i < logs.length; i++) {
if (parseInt(logs[i].Date.substring(6)) >= Date.parse(StartDate)
&& parseInt(logs[i].Date.substring(6)) <= Date.parse(EndDate)
&& $('#ProvCheckBox' + logs[i].ProvId).hasClass('visible')
&& $('#ProvCheckBox' + logs[i].ProvId).prop('checked')
&& $('#CalcCheckBox' + logs[i].CalcId).prop('checked'))
currentlogs.push(logs[i]);
}
if (firstfilter)
InitializeOutput();
else
UpdateOutput();
}
这工作正常,第一次调用它。 parseInt(logs[i].Date.substring(6))
从Date
属性中提取数字,比较有效。指定日期范围内的每个日志以及选中其 Calc 和 Prov 复选框的日志都将推送到 currentlogs
中。然后InitializeOutput
称为:
function InitializeOutput() {
$('#DateChart').kendoChart({
dataSource: {
data: currentlogs,
schema: {
model: {
fields: {
Id: { type: "number" },
//Date: { type: "date" }
//This is the problematic line of code
}
}
}
},
series: [{
type: "column",
aggregate: "count",
field: "Id",
categoryField: "Date"
}],
categoryAxis: {
baseUnit: "months",
majorGridLines: {
visible: false
}
}
});
}
如果未注释Date: { type: "date" }
,则下次调用 FilterLogs
时,logs
中包含的每个 Json 对象中的 Date
属性已更改。它们现在看起来像这样:
CalcId: 129
Date: Wed Jul 10 2013 00:00:00 GMT-0500 (Central Daylight Time)
DateTime: "/Date(1373432621070)/"
Id: 1
ProvId: 2
一旦它命中if (parseInt(logs[i].Date.substring(6))
语句,我就会得到以下内容:未捕获的类型错误:对象 [对象日期] 没有方法"子字符串"。
但是我需要那行代码不加注释,因为没有它,我就无法baseUnit
做除"days"
以外的任何事情。指定"weeks"
或"months"
或"years"
将被忽略,图表将显示天数。
我尝试将所有currentlogs
实例更改为局部变量templogs
,然后在过滤完成后templogs
复制到currentlogs
中,并且我还在FilterLogs
完成后调用InitializeOutput
,而不是从内部调用,因此在创建图表时"临时日志"甚至不应该存在,我得到了相同的结果。
有趣的是,如果我更改(未显示(kendo DatePickers 的起始值,以便日期范围内没有日志,并且currentlogs
在第一次FilterLogs
调用时保持为空,然后我打开日期范围,我不会遇到任何问题。但我不认为push
问题,因为我已经逐步完成了代码,并且在执行push
后logs
保持正常。
这是怎么回事?
我想继续以我的方式处理日期,因为代码中的其他所有内容都可以正常工作。为什么剑道只挂在currentlogs
上时会用logs
拧紧?
看起来我修复了它。我认为currentlogs.push(logs[i])
是在推送对 json 对象的引用,而不是复制它。将其更改为:
currentlogs.push({
Date: logs[i].Date,
DateTime: logs[i].DateTime,
ProvId: logs[i].ProvId,
CalcId: logs[i].CalcId
});
它现在有效。