IE 11 显示无效日期,chrome/firefox 显示正确日期
IE 11 showing invalid date and chrome/firefox shows correct dates
我正在测试 following JSFiddle 代码,该代码在 chrome 和 Firefox 中显示有效日期,在 IE 11 中显示无效日期。
这是我的 Javascript 来自 fiddle 的代码:
var data = [
{ name: 'A', date: '07/15/2014 05:00:00.0',des:'This is for A' },
{ name: 'A', date: '08/16/2016 06:00:00.0',des:'This is for 2A' },
{ name: 'A', date: '07/15/2015 07:00:00.0',des:'This is for 3A' },
{ name: 'B', date: '07/15/2016 07:00:00.0',des:'This is for B' },
{ name: 'B', date: '08/16/2016 07:00:00.0',des:'This is for 2B' },
{ name: 'B', date: '09/15/2016 07:00:00.0',des:'This is for 3B' },
{ name: 'C', date: '08/15/2015 07:00:00.0',des:'This is for C' },
{ name: 'D', date: '12/15/2015 07:00:00.0',des:'This is for D' },
{ name: 'E', date: '11/15/2015 07:00:00.0' ,des:'This is for E'}
];
var cl = function (s) { console.log(s); }
var isUsedKey = function (arrayOfObject, key)
{
for (var i = 0; i < arrayOfObject.length; i += 1)
{
if (arrayOfObject[i].key == key)
{
return true;
}
}
return false;
};
var array = [];
var object = {};
for (var i = 0; i < data.length; i++)
{
if (i == 0)
{
var newItem = {};
newItem.key = data[i].name;
newItem.dates = [data[i].date];
newItem.description = data[i].des;
array.push(newItem);
} else
{
var item = data[i];
var itemName = item.name;
var itemDate = item.date;
var itemDesc = item.des;
if (isUsedKey(array, itemName))
{
for (var j = 0; j < array.length; j++)
{
if (array[j].key == itemName)
{
var index = array[j].dates.length;
array[j].dates[index] = itemDate;
}
}
} else
{
var nextNewItem = {};
nextNewItem.key = itemName;
nextNewItem.dates = [itemDate];
nextNewItem.description = itemDesc;
array.push(nextNewItem);
}
}
}
var newSource = {
localdata: array,
datafields: [{
name: 'name',
type: 'string',
map: 'key'
}, {
name: 'date',
type: 'date',
map: 'dates>0'
},
{
name: 'des',
type: 'string',
map: 'description'
}
],
datatype: "array"
};
var newAdapter = new $.jqx.dataAdapter(newSource);
console.log(newAdapter);
// Adding for dropdown icon
var iconrenderer = function (row, columnfield, value, defaulthtml, columnproperties) {
console.log("Test for Date Values");
console.log(value);
return '<span style="position: relative; width: 100%; margin: 4px; float: ' + columnproperties.cellsalign + ';">' + value + '<img src="https://www.jqwidgets.com/public/jqwidgets/styles/images/icon-down.png" style="position: absolute; right: 5px;" /></span>';
}
$("#jqxgrid").jqxGrid({
source: newAdapter,
editable: true,
columns: [
{
text: 'Name',
datafield: 'name',
editable: false,
width: 100,
height: 100
},
{
text: 'Date',
datafield: 'date',
cellsformat: 'd',
columntype: 'combobox',
width: 200,
height: 200,
cellsrenderer: iconrenderer,
createeditor: function (row, column, editor)
{
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++)
{
if (array[i].key == groupName)
{
dates = array[i].dates;
}
}
editor.jqxComboBox({ autoDropDownHeight: true, source: dates, promptText: "Please Choose:" });
},
initeditor: function (row, column, editor)
{
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++)
{
if (array[i].key == groupName)
{
dates = array[i].dates;
}
}
editor.jqxComboBox({
autoDropDownHeight: true,
source: dates,
promptText: "Previous Dates:",
renderer: function (index_, label_, value_)
{
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(value_);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
},
renderSelectedItem: function (index, item)
{
var records = editor.jqxComboBox('getItems');
var currentRecord = records[index].label;
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(currentRecord);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
}
});
},
cellvaluechanging: function (row, column, columntype, oldvalue, newvalue)
{
// return the old value, if the new value is empty.
if (newvalue == "") return oldvalue;
},
},
{
text: 'Description',
datafield: 'des',
editable: false,
width: 100,
height: 100
}
],
});
这是我的 CSS 来自 Fiddle 的代码:
body { width: 100%; height: 100%; }
这是我的 HTML 来自 Fiddle 的代码:
<div id='jqxWidget'>
<div id="jqxgrid"></div>
</div>
问题描述:
我在上面代码的以下位置添加了两个控制台日志:
var iconrenderer = function (row, columnfield, value, defaulthtml, columnproperties) {
console.log("Test for Date Values");
console.log(value);
return '<span style="position: relative; width: 100%; margin: 4px; float: ' + columnproperties.cellsalign + ';">' + value + '<img src="https://www.jqwidgets.com/public/jqwidgets/styles/images/icon-down.png" style="position: absolute; right: 5px;" /></span>';
Internet Explorer 11(在控制台日志中)出于某种原因显示今天的日期是不正确的,如下所示:
Chrome 并且 Firefox 显示 Fiddle 中提到的正确日期。这是 chrome:
的屏幕截图
谁能告诉我如何解决我的 JSFiddle 代码中与 IE 日期相关的问题?
[Invalid Date]消息来自proto函数,这是IE的内部实现导致的,所以你不用担心,将"console.log(value)"这行代码替换为"console.log(value.toString());"
我正在测试 following JSFiddle 代码,该代码在 chrome 和 Firefox 中显示有效日期,在 IE 11 中显示无效日期。
这是我的 Javascript 来自 fiddle 的代码:
var data = [
{ name: 'A', date: '07/15/2014 05:00:00.0',des:'This is for A' },
{ name: 'A', date: '08/16/2016 06:00:00.0',des:'This is for 2A' },
{ name: 'A', date: '07/15/2015 07:00:00.0',des:'This is for 3A' },
{ name: 'B', date: '07/15/2016 07:00:00.0',des:'This is for B' },
{ name: 'B', date: '08/16/2016 07:00:00.0',des:'This is for 2B' },
{ name: 'B', date: '09/15/2016 07:00:00.0',des:'This is for 3B' },
{ name: 'C', date: '08/15/2015 07:00:00.0',des:'This is for C' },
{ name: 'D', date: '12/15/2015 07:00:00.0',des:'This is for D' },
{ name: 'E', date: '11/15/2015 07:00:00.0' ,des:'This is for E'}
];
var cl = function (s) { console.log(s); }
var isUsedKey = function (arrayOfObject, key)
{
for (var i = 0; i < arrayOfObject.length; i += 1)
{
if (arrayOfObject[i].key == key)
{
return true;
}
}
return false;
};
var array = [];
var object = {};
for (var i = 0; i < data.length; i++)
{
if (i == 0)
{
var newItem = {};
newItem.key = data[i].name;
newItem.dates = [data[i].date];
newItem.description = data[i].des;
array.push(newItem);
} else
{
var item = data[i];
var itemName = item.name;
var itemDate = item.date;
var itemDesc = item.des;
if (isUsedKey(array, itemName))
{
for (var j = 0; j < array.length; j++)
{
if (array[j].key == itemName)
{
var index = array[j].dates.length;
array[j].dates[index] = itemDate;
}
}
} else
{
var nextNewItem = {};
nextNewItem.key = itemName;
nextNewItem.dates = [itemDate];
nextNewItem.description = itemDesc;
array.push(nextNewItem);
}
}
}
var newSource = {
localdata: array,
datafields: [{
name: 'name',
type: 'string',
map: 'key'
}, {
name: 'date',
type: 'date',
map: 'dates>0'
},
{
name: 'des',
type: 'string',
map: 'description'
}
],
datatype: "array"
};
var newAdapter = new $.jqx.dataAdapter(newSource);
console.log(newAdapter);
// Adding for dropdown icon
var iconrenderer = function (row, columnfield, value, defaulthtml, columnproperties) {
console.log("Test for Date Values");
console.log(value);
return '<span style="position: relative; width: 100%; margin: 4px; float: ' + columnproperties.cellsalign + ';">' + value + '<img src="https://www.jqwidgets.com/public/jqwidgets/styles/images/icon-down.png" style="position: absolute; right: 5px;" /></span>';
}
$("#jqxgrid").jqxGrid({
source: newAdapter,
editable: true,
columns: [
{
text: 'Name',
datafield: 'name',
editable: false,
width: 100,
height: 100
},
{
text: 'Date',
datafield: 'date',
cellsformat: 'd',
columntype: 'combobox',
width: 200,
height: 200,
cellsrenderer: iconrenderer,
createeditor: function (row, column, editor)
{
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++)
{
if (array[i].key == groupName)
{
dates = array[i].dates;
}
}
editor.jqxComboBox({ autoDropDownHeight: true, source: dates, promptText: "Please Choose:" });
},
initeditor: function (row, column, editor)
{
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++)
{
if (array[i].key == groupName)
{
dates = array[i].dates;
}
}
editor.jqxComboBox({
autoDropDownHeight: true,
source: dates,
promptText: "Previous Dates:",
renderer: function (index_, label_, value_)
{
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(value_);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
},
renderSelectedItem: function (index, item)
{
var records = editor.jqxComboBox('getItems');
var currentRecord = records[index].label;
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(currentRecord);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
}
});
},
cellvaluechanging: function (row, column, columntype, oldvalue, newvalue)
{
// return the old value, if the new value is empty.
if (newvalue == "") return oldvalue;
},
},
{
text: 'Description',
datafield: 'des',
editable: false,
width: 100,
height: 100
}
],
});
这是我的 CSS 来自 Fiddle 的代码:
body { width: 100%; height: 100%; }
这是我的 HTML 来自 Fiddle 的代码:
<div id='jqxWidget'>
<div id="jqxgrid"></div>
</div>
问题描述:
我在上面代码的以下位置添加了两个控制台日志:
var iconrenderer = function (row, columnfield, value, defaulthtml, columnproperties) {
console.log("Test for Date Values");
console.log(value);
return '<span style="position: relative; width: 100%; margin: 4px; float: ' + columnproperties.cellsalign + ';">' + value + '<img src="https://www.jqwidgets.com/public/jqwidgets/styles/images/icon-down.png" style="position: absolute; right: 5px;" /></span>';
Internet Explorer 11(在控制台日志中)出于某种原因显示今天的日期是不正确的,如下所示:
Chrome 并且 Firefox 显示 Fiddle 中提到的正确日期。这是 chrome:
的屏幕截图谁能告诉我如何解决我的 JSFiddle 代码中与 IE 日期相关的问题?
[Invalid Date]消息来自proto函数,这是IE的内部实现导致的,所以你不用担心,将"console.log(value)"这行代码替换为"console.log(value.toString());"