起初这可能看起来像许多其他已经在JavaScript中提到的关于NaN的问题,但我向你保证不是.
我有这段代码转换从文本框中获取值,并在单击表单中的按钮后将其转换为日期:
var dateString = $('#itemAcquiredTxt').val(); //Would have a value of '2013-12-15' var dateAcquired = new Date(dateString); //Invalid Date ?
文本框itemAcquiredTxt将具有从数据库调用中获取的值"2013-12-15"(YYYY-MM-DD格式):
$('#itemAcquiredTxt').val(new Date(item.DateAcquired).toLocaleDateString());
创建新的Date对象后,它会给我"无效日期".
好的...所以我想通过将年,月和日作为数字 - 其他构造函数之一传递来创建Date对象.
var year = Number(dateString.split("-")[0]); //Returns NaN var month = Number(dateString.split("-")[1]); //Returns NaN var day = Number(dateString.split("-")[2]); //Returns NaN var dateAcquired = new Date(year, month - 1, day); //InvalidDate
我尝试用破折号分割日期文本框中的字符串,并使用Number和parseInt将字符串转换为数字 - 但两者都给了我一个NaN.我仔细检查了字符串值,似乎没有错:分别在分割项目上"2013","12","15".
我对自己说......也许我的代码是坏的,试了一下的jsfiddle
https://jsfiddle.net/jrxg40js/
但正如你可以看到有放置一个日期文本,按下按钮后,它的工作原理!
下面是相关的HTML代码
Name: | |
Category: | |
Sub Category | |
Description: | |
Serial Number: | |
Year: | |
Initial Cost: | |
Department: | |
Campus: | |
Building: | |
Date Acquired: | |
Notes: |
相关的AngularJS函数用于使用用户键入的新数据更新项目 - 当用户按下确认按钮时,将调用该函数:
$scope.editItem = function () { var dateString = $('#itemAcquiredTxt').val(); dateAcquired = new Date(dateString); var invItem = { ItemID: $('#itemID').val(), ItemName: $('#itemNameTxt').val().trim(), CategoryID: $('#categorySelect').find(":selected").val(), SubCategoryID: $('#subCategorySelect').find(":selected").val(), Description: $('#itemDescriptionTxt').val().trim(), SerialNumber: $('#itemSerialNumberTxt').val().trim(), Year: $('#itemYearTxt').val().trim(), DateAcquired: dateAcquired, Value: $('#itemValueTxt').val().trim(), RoleID: $('#departmentSelect').find(":selected").val(), Barcode: null, Notes: $('#noteTxt').val().trim(), Deleted: null, AddedBy: null, DateAdded: null, ModifiedBy: null, //Added by server DateModified: null, DeletedBy: '', DateDeleted: null, CampusID: $('#campusSelect').find(":selected").val(), BuildingID: $('#buildingSelect').find(":selected").val(), RoomID: null }; $http.put("api/inventory/", invItem).success(function (data, status, headers, config) { inventoryData.retrieveData(); //On success, refresh zeh data }).error(function (data, status, headers, config) { console.log(data); }); $("#dialogForm").dialog("close");
为什么我的代码在我的工作环境中返回NaN(IE11上的Visual Studio 2015调试)当其他网站(如JSFiddle)返回我期望的内容时?