Javascript iOS设备上的日期返回NaN
我目前正在用ionic和angularjs开发一个基于cordova web的应用程序。现在,我已经创建了一个服务,它以我的客户机希望的方式返回格式化的时间。。问题是,虽然它可以在android和浏览器上工作,但在iOS设备上显示NaN。我插入的日期是以timestamp:NOW()格式从数据库中输入的,是否对此进行了修复? 这是我的约会服务:Javascript iOS设备上的日期返回NaN,javascript,angularjs,datetime,webkit,Javascript,Angularjs,Datetime,Webkit,我目前正在用ionic和angularjs开发一个基于cordova web的应用程序。现在,我已经创建了一个服务,它以我的客户机希望的方式返回格式化的时间。。问题是,虽然它可以在android和浏览器上工作,但在iOS设备上显示NaN。我插入的日期是以timestamp:NOW()格式从数据库中输入的,是否对此进行了修复? 这是我的约会服务: .factory('displaydate',['$filter', function($filter) { return function (da
.factory('displaydate',['$filter', function($filter) {
return function (date){
var maandarray = new Array('Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December');
var actiondate = new Date(date);
var today = new Date();
if(today.getDate() == actiondate.getDate()){
var hourssince = today.getHours() - actiondate.getHours()
var minutessince = today.getMinutes() - actiondate.getMinutes()
var secondssince = today.getSeconds() - actiondate.getSeconds()
if(hourssince > 0){
date = hourssince+'u';
}else if(minutessince > 0){
date = minutessince+'m';
}else{
date = secondssince+'s';
}
}else{
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.round(Math.abs((today.getTime() - actiondate.getTime())/(oneDay)));
if(diffDays > 28){
var identifier = actiondate.getMonth() - 1;
var month = maandarray[identifier];
date = $filter('date')(actiondate,"d ") + month + $filter('date')(actiondate," yy " + " HH:" + "mm");
}else{
date = diffDays+'d';
}
}
return date;
}
}]);
由于@Ian的评论,修复了此问题 更改为:
var actiondate = new Date(date);
为此:
var t = date.split(/[- :]/);
// Apply each element to the Date function
var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
var actiondate = new Date(d);
问题的原因是iPhone Safari不支持
Y-m-d H:i:s
(ISO 8601)日期格式。我在2017年7月19日遇到过这个问题,我不明白为什么Safari两年后没有解决这个问题
我参考了Sjoerd的答案,谢谢Sjoerd,当您有很多日期需要处理时,只需将其重写为一个函数来进行日期转换。从服务器获取日期(必须是Y-m-d H:i:s
格式)后,可以使用函数将日期转换为iOS设备可以解析的格式,其他浏览器也可以解析
function convertDateForIos(date) {
var arr = date.split(/[- :]/);
date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
return date;
}
我在为date编写ajax时遇到了这个问题,希望该解决方案能帮助其他人解决这个恼人的问题。通过
npm安装时刻--保存 使用
var date=时刻(yourDate).format()
var formattedate=新数据(日期)
希望这能解决问题这可能意味着您开始使用的“日期”字符串在iOS中不被理解为有效的日期格式。如果你用一个不可解析的字符串构造一个日期实例,那么所有的API都会返回
NaN
。你应该用标准格式(ISO)来格式化这个字符串,我很确定它会正常工作。直接从db@SjoerdDeWit这将生成一个接近ISO8601的日期时间,但不完全相同。如果你想在所有浏览器中正确解析它,你需要格式化它,或者自己解析它(或者使用一个库),谢谢@Ian格式化它确实修复了它。非常感谢,对于json日期格式var t=date.split(/[-:t]/)代码>并且不要忘记为数组的每个元素parseInt()新日期(parseInt(t[0]),parse…
谢谢Sjoerd!Hold!这取决于一个库的一个简单函数。我建议阅读以下内容:我不断收到一个错误“Date.split不是函数”…知道为什么吗?@CJBroersma可能是您的日期
不是有效的Y-m-d H:i:s
(ISO 8601)日期格式。请检查它并格式化日期
。哦,谢谢,我错过了一些确实更改了它的服务器端代码。谢谢您的强大功能。