【问题标题】:"Number Expected" Error in IE 11 with .toLocalString()/.toISOString()带有 .toLocalString()/.toISOString() 的 IE 11 中出现“预期数量”错误
【发布时间】:2017-06-08 22:53:41
【问题描述】:

我在该行收到错误“预期数字”:

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>

【问题讨论】:

    标签: javascript internet-explorer-11


    【解决方案1】:

    我也看到了这个问题,但方式不同。

    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();

    http://plnkr.co/edit/8WAhslAphwR3BHxnq3bE?p=preview

    【讨论】:

      【解决方案2】:

      其中$('#itemOpenDate').val() 是表示日期的字符串,例如“2016 年 8 月 11 日”

      你的问题。 JavaScript 的 Date 构造函数不需要在规范中支持除 the date/time format 之外的任何东西,它是(在 ES2015 规范中)ISO-8601 的子集(在 ES5 规范中,他们犯了一个错误,使它不相当一个子集),例如2016-08-11。每当您要求它解析其他任何内容时,您都会陷入未定义的行为。您需要有意解析字符串(使用您自己的代码,或使用 MomentJS 之类的库)。

      【讨论】:

      • 是不是因为Invalid Date
      • @Rayon:可能,这取决于 IE11 在遇到它不理解的字符串时决定做什么。它很可能会构造一个无效的日期(例如,相当于new Date(NaN)),在这种情况下getHours 和所有这些都返回NaN
      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多