iOS设备上的日期返回NaN

时间:2014-10-30 15:40:17

标签: javascript angularjs datetime webkit

我目前正在开发一种基于cordova web的离子和角度应用程序。现在我已经创建了一个服务,它按照我的客户想要的方式返回格式化的时间..这个问题是,虽然它适用于Android和浏览器,但它在iOS设备上显示NaN。我插入的日期来自时间戳: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;
  }
}]);

3 个答案:

答案 0 :(得分:20)

感谢@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);

答案 1 :(得分:7)

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

我在写关于日期的ajax时遇到了问题,希望解决方案能帮助别人遇到烦人的问题。

答案 2 :(得分:-2)

将momentjs安装到
npm安装时刻--save

通过
引入新日期 var date = moment(yourDate).format()
var formatedDate =新数据(日期)

希望这可以解决问题