iOS设备上的日期返回NaN

问题描述:

我目前正在开发一个cordova基于web的应用程序与离子和angularjs。现在我已经创建了一种服务,以我的客户想要的方式返回一个格式化的时间..这个问题是,虽然它适用于Android和浏览器,但它在iOS设备上显示NaN。我插入的日期是从时间戳中的数据库:NOW()格式,有没有解决这个问题? 这是我最新的服务:iOS设备上的日期返回NaN

.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; 
    } 
}]); 
+1

这可能意味着您开始使用的“日期”字符串在iOS中不被理解为有效的日期格式。如果使用不可解析的字符串构造Date实例,则所有API返回'NaN'。 – Pointy 2014-10-30 15:47:08

+0

你应该以标准格式(ISO)格式化字符串,我敢肯定它会工作 – 2014-10-30 15:53:34

+0

它是一个MySQL时间戳NOW()格式字符串直接从db – 2014-10-30 15:54:49

修正此感谢@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); 
+0

非常感谢,为json日期格式'var t = date.split(/ [ - :T] /);'并且不要忘记parseInt()为数组的每个元素'new Date(parseInt(t [0])) ,解析...' – bowpunya 2016-06-27 09:26:52

+0

谢谢Sjoerd!举行了! – 2017-06-23 13:41:06

的原因问题是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; 
} 

我遇到的问题,当我写的日期阿贾克斯,希望该解决方案将帮助其他人遇到的恼人的问题。