美文网首页
ios native 的NSDate转到React native

ios native 的NSDate转到React native

作者: 米米0311 | 来源:发表于2019-09-30 12:16 被阅读0次

最近开发过程中与别的部门对接时,model中有个字段传给我的是NSDate类型,为了便于RN处理我直接用第三方YYModel转化model to NSDictionary,这一步比较简单,不做过多说明,直接上代码:
NSDictionary *modelDict = [model yy_modelToJSONObject];
NSDate通过YYModel转化成日期字符串2019-05-22T13:20:55+0800,RN层直接new Date(2019-05-22T13:20:55+0800),然而发现转发的日期不正确,这个一下就蒙了,首先想到的是native层直接把日期转化成时间戳到RN,然而老大不让啊,本着不懂的时间就要搞明白的心态,也想找下这个原因到底是为什么,通过各种查到发现RN是不支持-T的,要把-换成/T换成空格就ok了,于是高高兴兴的就写代码替换了,代码如下:

export function getDateStrByNativeDateStr(date) {
  if (!date) {
    return null;
  }
  if (date.indexOf('-') >= 0) {
    date = date.replace('-', '/');
  }
  if (date.indexOf('T') >= 0) {
    date = date.replace('T', ' ');
  }
  return date;
}

看似如此完美,然鹅,一运行,RN又华丽丽的跟我挖了个坑date.replace('-', '/')只能替换第一个-, 查写replace()方法发现还真的只是替换第一个,又被RN好好的坑了一次,一想这个不难的,把所有的-一起替换一下呗,直接贴代码:

export function getDateStrByNativeDateStr(date) {
  if (!date) {
    return null;
  }
  while (date.indexOf('-') >= 0) {
    date = date.replace('-', '/');
  }
  if (date.indexOf('T') >= 0) {
    date = date.replace('T', ' ');
  }
  return date;
}

写好还沾沾自喜,感觉自己挺厉害的,就这样代码运行了几个月,忽然老板去了美国,发现app运行不起来了,到处查原因才发现,这个日期的出来有问题,这是想到了我对-T的替换,手机抓紧切时区,打印发现YYModel处理后返回的日期字符串为2019-05-22T13:20:55-0700,完全没考虑的把后面的-也替换成了/,就这样报错了,事后总结了一下自己犯下的这个严重的错误的原因是压根没有理解2019-05-22T13:20:55-0700里面每个字母数字的真实含义,还自以为是的以为自己搞的很完美。
后来仔细查了一下,T代表后面跟着是时间,-0700+0800分别代表的是西七区和东八区,我把-替换成了/, 完全就错了。

RN和Native遇到NSDate时,由于格式的不一致,一定要写成时间戳相互传,而不能自以为是的认为RN和Native一定有相同的日期处理(自以为日期很常见,各种语言的处理都一样),避免入坑

相关文章

网友评论

      本文标题:ios native 的NSDate转到React native

      本文链接:https://www.haomeiwen.com/subject/rlvcpctx.html