我正在与Kendo UI合作,每秒钟都在讨厌它,而且我觉得我找到了解决问题的方法,但我陷入了最后一段时间。所以我们的服务器都在PST上,无论出于何种原因,我们的Kendo UI网格显示的是实际值的一天后的日期。
他们在他们的网站上有一个“修复”,但它并没有完全插入。这就是我设法剔除的内容:
这是列代码:
columns.Bound(e => e.eventDate).Width(120).Title("Event Date").ClientTemplate("#= parseDateGrid(eventDate) #").EditorTemplateName("Date");
和解析日期的代码:
var offsetMiliseconds = new Date().getTimezoneOffset() * 60000;
function parseDateGrid(e) {
var eventDate = null;
if (e.sender)
eventDate = e.sender._value;
else
eventDate = e;
// eventDate = Fri Mar 19 2055 00:00:00 GMT-0400(东部夏令时)
var sDate = eventDate.toString();
sDate = sDate.replace(/\d+/,
function (n) { return parseInt(n) + offsetMiliseconds });
// sDate =“Fri Mar 14400019 2055 00:00:00 GMT-0400(东部夏令时)”
var eventDateFormatted = new Date(sDate);
return eventDateFormatted;
}
UI返回“无效日期”,其中应该是eventDate字段。我认为问题是我错误地将字符串格式化为替换函数后的日期。感觉就像我在附近,提前感谢任何帮助。
编辑:
使用此功能:
function addOffset(events) {
for (var i = 0; i < events.length; i++) {
var eventDate1 = new Date(events[i].eventDate); // for testing purpose
var sdate = eventDate1.getTime() + offsetMiliseconds;
var eventDateFormatted = new Date(sdate);
return eventDateFormatted.toLocaleDateString();
}
}
答案 0 :(得分:1)
您不需要替换功能
使用 getTime()并向其添加毫秒数
var offsetMiliseconds = new Date().getTimezoneOffset() * 60000;
var eventDate = new Date("Fri Mar 19 2055 00:00:00 GMT-0400 (Eastern Daylight Time)"); // for testing purpose
var sdate = eventDate.getTime() + offsetMiliseconds;
var eventDateFormatted = new Date(sdate);
alert(eventDateFormatted);
这里有一个jsfiddle为您提供中间警报