"Number Expected" IE 11 中的 .toLocalString()/.toISOString() 错误
"Number Expected" Error in IE 11 with .toLocalString()/.toISOString()
我在以下行收到错误 "Number expected":
new Date($('#itemOpenDate').val()).toISOString();
其中 $('#itemOpenDate').val() 是表示日期的字符串,例如“8/11/2016”,仅在 IE 11 中(在 Chrome、Firefox 和 Safari 中测试正常)。
我已将范围缩小到#itemOpenDate 的填充方式。请参阅下面的代码。我收到以下错误:
('#itemOpenDate').val(new Date("8/2/2016").toLocaleString());
但以下工作正常(即使在 IE 11 中):
$('#itemOpenDate').val(new Date("8/2/2016").toDateString());
当然,我想要 .toLocaleString 提供的格式。有什么想法吗?
重现代码:
<!doctype html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container" role="main">
<form class="center-block form-horizontal">
<div class="form-group">
<label for="itemOpenDate" class="control-label">Open Date:</label>
<input type="text" class="form-control input-lg" id="itemOpenDate">
</div>
<div class="form-group">
<button id="updateItemButton" title="Update Item" type="button" class="btn btn-primary btn-lg btn-block">Update</button>
</div>
</form>
</div>
<script type="text/javascript">
$(document).ready(function () {
$("#itemOpenDate").datepicker();
getPunchlistItem();
$("#updateItemButton").click(function () {
updatePunchlistItem();
});
});
function getPunchlistItem(myPLItemID) {
$('#itemOpenDate').val(new Date("8/2/2016").toLocaleString()); // error
$('#itemOpenDate').val(new Date("8/2/2016").toDateString()); // no error
}
function updatePunchlistItem() {
var myOpenDate = new Date($('#itemOpenDate').val()).toISOString();
console.log(myOpenDate);
}
</script>
</body>
</html>
where $('#itemOpenDate').val()
is a string representing a date, e.g. "8/11/2016"
这是你的问题。 JavaScript 的 Date
构造函数不需要在规范中支持除 the date/time format 之外的任何内容,它是(从 ES2015 规范开始)ISO-8601 的子集(在 ES5 规范中,他们犯了一个错误,使它不完全是一个子集),例如2016-08-11
。任何时候你要求它解析任何其他东西,你都会陷入未定义的行为。您需要有意地解析字符串(使用您自己的代码,或使用像 MomentJS 这样的库)。
我也看到过这个问题,但方式不同。
var date = new Date('2017-07-02 00:00:00Z').toISOString();
这适用于 chrome 但不适用于 IE11。在日期和时间之间添加一个 T 解决了 IE11 中的问题,它在 Chrome 中仍然有效。
var date = new Date('2017-07-02T00:00:00Z').toISOString();
我在以下行收到错误 "Number expected":
new Date($('#itemOpenDate').val()).toISOString();
其中 $('#itemOpenDate').val() 是表示日期的字符串,例如“8/11/2016”,仅在 IE 11 中(在 Chrome、Firefox 和 Safari 中测试正常)。
我已将范围缩小到#itemOpenDate 的填充方式。请参阅下面的代码。我收到以下错误:
('#itemOpenDate').val(new Date("8/2/2016").toLocaleString());
但以下工作正常(即使在 IE 11 中):
$('#itemOpenDate').val(new Date("8/2/2016").toDateString());
当然,我想要 .toLocaleString 提供的格式。有什么想法吗?
重现代码:
<!doctype html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container" role="main">
<form class="center-block form-horizontal">
<div class="form-group">
<label for="itemOpenDate" class="control-label">Open Date:</label>
<input type="text" class="form-control input-lg" id="itemOpenDate">
</div>
<div class="form-group">
<button id="updateItemButton" title="Update Item" type="button" class="btn btn-primary btn-lg btn-block">Update</button>
</div>
</form>
</div>
<script type="text/javascript">
$(document).ready(function () {
$("#itemOpenDate").datepicker();
getPunchlistItem();
$("#updateItemButton").click(function () {
updatePunchlistItem();
});
});
function getPunchlistItem(myPLItemID) {
$('#itemOpenDate').val(new Date("8/2/2016").toLocaleString()); // error
$('#itemOpenDate').val(new Date("8/2/2016").toDateString()); // no error
}
function updatePunchlistItem() {
var myOpenDate = new Date($('#itemOpenDate').val()).toISOString();
console.log(myOpenDate);
}
</script>
</body>
</html>
where
$('#itemOpenDate').val()
is a string representing a date, e.g. "8/11/2016"
这是你的问题。 JavaScript 的 Date
构造函数不需要在规范中支持除 the date/time format 之外的任何内容,它是(从 ES2015 规范开始)ISO-8601 的子集(在 ES5 规范中,他们犯了一个错误,使它不完全是一个子集),例如2016-08-11
。任何时候你要求它解析任何其他东西,你都会陷入未定义的行为。您需要有意地解析字符串(使用您自己的代码,或使用像 MomentJS 这样的库)。
我也看到过这个问题,但方式不同。
var date = new Date('2017-07-02 00:00:00Z').toISOString();
这适用于 chrome 但不适用于 IE11。在日期和时间之间添加一个 T 解决了 IE11 中的问题,它在 Chrome 中仍然有效。
var date = new Date('2017-07-02T00:00:00Z').toISOString();