Javascript iOS设备上的日期返回NaN

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

我目前正在用ionic和angularjs开发一个基于cordova web的应用程序。现在,我已经创建了一个服务,它以我的客户机希望的方式返回格式化的时间。。问题是,虽然它可以在android和浏览器上工作,但在iOS设备上显示NaN。我插入的日期是以timestamp:NOW()格式从数据库中输入的,是否对此进行了修复? 这是我的约会服务:

.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)日期格式。请检查它并格式化
日期
。哦,谢谢,我错过了一些确实更改了它的服务器端代码。谢谢您的强大功能。