为什么我的 KendoUI 图表在它甚至没有连接的 javascript 变量中更改日期格式?以及如何让它停止
Why is my KendoUI Chart changing the date format in a javascript variable it's not even connected to? And how to make it stop?
我从数据库中提取一堆条目,将它们存储在变量中,然后根据各种条件将它们过滤到单独的变量中。一旦我的剑道图表初始化,基于过滤版本,它会以某种方式更改第一个变量中条目的日期格式,但我的代码希望它们采用原始格式。我已经将问题追踪到一行,但我需要那行。
我在 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
});
它现在有效。
- JavaScript 时刻格式日期字符串
- 时刻.js转换 MM/dd/yyyy 格式日期
- JQGrid - 日期过滤器不适用于日期格式(日期(1453636335000))
- Jquery UI 日期选择器设置日期不适用于格式日期的动态更改
- 解析网页上的自由格式日期条目
- Javascript - 查找两个 MM-dd-yyyy HH:mm:ss 格式日期之间的秒数
- Javascript格式日期
- angularJs指令格式日期
- 如何解析 yyyy-MM-dd HH:mm:ss.javascript中的SSS格式日期
- JS原生格式日期方法
- JavaScript格式日期从DDMMYYYY到DD/MM/YYYY
- 不能转换成正确的格式日期&来自fullcalendar事件对象的小时
- 从unix - time格式日期为yyyy-mm-dd
- 如何在引导日历中将英语格式日期更改为西班牙语
- 使用包含英国格式日期的字符串设置new Date()
- 解析ISO-8601格式日期在ie9中不工作
- 格式日期从dd/MM/yyy hh: MM:ss到yyyy/MM/dd hh: MM:ss
- 如何获得正确的格式日期在前一个月与谷歌应用程序脚本
- Moment js格式日期与时区
- 格式日期&在kendo.ui.GridColumn