为什么后台返回的日期我输出处理了在苹果手机里显示NAN?

后台返回的是日期字符串。例如:"2017-12-19 10:25:03" 这样的日期。

然后我要处理这个日期并且显示在苹果手机里可以正常显示。

我是这样处理的。

let dates = "2017-12-19 10:25:03";
let newDates = dates.replace(/\-/g?,"/");//将"-"转成"/"
let data = new Date(newDates).toLocaleDateString(); //获取前面的日期,不要时分秒
let nowData = new Date().toLocaleDateString(); //获取当前日期
let yest = Date.parse(nowData)- 24 * 60 * 60 * 1000;//一天前的日期时间戳
if(Date.parse(data) == Date.parse(nowData)){ //如果日期的时间戳相同则是今天
    //输出今天
}
if(Date.parse(data) == yest){
    //输出昨天
}
//其他情况输出相应的日期data

重点是,结果苹果手机上还是为NaN
求解(大扎好,我系轱天乐,我四渣渣辉,探挽懒月,介四里没有挽过的船新版本,挤需体验三番钟,里造会干我一样,爱象节款游戏。)

阅读 5.8k
7 个回答

这个是因为,日期格式为字符串的原因。我也遇到过,找相应方法把日期处理下

每太看懂你想要的什么 但是我我在Safari运行的都能出效果了 应该不是兼容问题问题 你看看是不是你逻辑判断的出问题了 if哪里判断不出来

你确定你这段代码是复制过来的?有报错啊,不知道你怎么运行成功的。正则那句有错

可以用moment模块来对日期格式化,我之前也遇到了这个问题,用moment的format解决了。

首先,你的规则式处理字符串那段是多余的,jsDate对象在构建时能够支持这种格式的日期字符串
另外Date.parse也支持"YYYY-MM-DD"这样的日期字符串

你要判断是否今天不需要导入字符串处理即可。

let dates = "2017-12-19 10:25:03";
let Cdate = new Date( dates  ).toLocaleDateString(); //获取前面的日期,不要时分秒 ,服务器时间的日期信息字符串
let nowData = new Date().toLocaleDateString(); //获取当前时间的日期信息字符串
let yest = new Date(new Date() - 24 * 60 * 60 * 1000).toLocaleDateString();//一天前的日期字符串

if(Cdate == nowDate){ //如果日期的时间戳相同则是今天
    //输出今天
}
if(Cdate == yest){
    //输出昨天
}
//其他情况输出相应的日期data

你转换后的data="19/12/2017",Date.parse(data)就已经为NaN了,parse不支持这种格式,日期用2017-12-19这个格式就行了。

苹果几?
如果是ios10以下用let,你怕是石乐志。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题