我们在 asp.net MVC 应用程序中使用 JQgrid...
Jqgrids 按照设计在显示的所有日期时间上进行时区偏移...
我们想改为显示服务器时间(未针对时区进行修改)
我找到了这个答案: jqgrid is display different datetime based on time zone
它告诉我使用自定义格式化程序使用 Json 序列化器将 MS 样式日期时间重新格式化为新格式。
这是我的网格定义
function InitJqGridMon() {
startUrl = '@Url.Action("GetClassPeriodsByDayCd", "Scheduling")';
GridParams = { url: startUrl, colModel: [
{ name:'Scheduled', index:'Scheduled', label:' ', align:'left', width:2, formatter: FormatCheckBox },
{ name:'PeriodId', index:'PeriodId', hidden: true },
{ name:'PeriodNo', index:'PeriodNo', label:'Per', align:'center', width:2 },
{ name:'PeriodStartTm', index:'PeriodStartTm', label:'Start', align:'left', width:4, formatter: date, formatoptions: { srcformat: 'mdY', newformat: 'h:i A'} },
{ name:'PeriodEndTm', index:'PeriodEndTm', label:'End', align:'left', width:4, formatter: date, formatoptions: { srcformat: 'mdY', newformat: 'h:i A'} },
{ name:'Available', index:'Available', label:'Avl.', align:'left', width:2, formatter: FormatAvailable },
{ name:'ClsId', index:'ClsId', hidden: true },
{ name:'ClsPeriodId', index:'ClsPeriodId', hidden: true },
{ name:'CtrId', index:'CtrId', hidden: true },
{ name:'PeriodDayCd', index:'PeriodDayCd', hidden: true },
{ name:'BeoIndex', index:'BeoIndex', hidden: true },
{ name:'ScheduledModified', index:'ScheduledModified', hidden: true }
] };
我在范围内定义了这个......
var myEditSerialize = function (data) {
var obj = $.extend({}, data);
obj.RolloutTermin = jQuery.datepicker.parseDate('dd.mm.yy', data.RolloutDate);
if (Date.isInstanceOfType(obj.RolloutDate)) {
obj.RolloutDate= '\/Date(' + obj.RolloutDate.getTime() + ')\/';
}
返回 JSON.stringify(obj);
然后我做了这个改变:
{ name:'PeriodStartTm', index:'PeriodStartTm', label:'Start', align:'left', width:4, formatter: myEditSerialize , formatoptions: { srcformat: 'mdY', newformat: 'h:i A' } },
它失败了
我在我们的代码中挖掘了一个工作格式化程序的示例并尝试了这个
function FormatDateTime(cellValue, options, rowObject)
{
var obj = $.extend({}, cellValue);
obj.RolloutTermin = jQuery.datepicker.parseDate('dd.mm.yy', cellValue.RolloutDate);
if (Date.isInstanceOfType(obj.RolloutDate)) {
obj.RolloutDate= '\/Date(' + obj.RolloutDate.getTime() + ')\/';
return JSON.stringify(obj);
}
{ name:'PeriodStartTm', index:'PeriodStartTm', label:'Start', align:'left', width:4, formatter: FormatDateTime, formatoptions: { srcformat: 'mdY', newformat: 'h:i A'} },
但是当我运行它时, data 。推出日期未定义...
在这一点上,我意识到我对解决我的问题所要做的事情了解得不够多,无法理解给定答案的正确实现......
当我调试
var obj = $.extend({}, cellValue);
Obj 是由 MS 序列化的日期时间值的字符到达(自纪元以来的毫秒数),而不是某个具有 RolloutDate 属性的对象...
我迷路了,有人可以帮我理解发生了什么,并指出我解决这个问题的正确方法吗?我不是一个很棒的 JavaScript 人,我可以做 Jquery,而且我只使用过几次 JQGrid.. 主要是样板.. 所以我敢肯定这是我缺乏 jqgrid-fu 的问题.