ISO 时间不兼容问题

1.从数据库获取时间,谷歌浏览器和安卓都显示正常,但是到了苹果的浏览器就显示NaN
以下是时间转换的代码:

export function getTimeStringSimple(timeStamp) {
  console.log('传入的时间-timeStamp',timeStamp)
  const date = new Date(timeStamp);
  console.log('Date后的时间-date',date)
  console.log(date.getFullYear())
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const dayOfMonth = date.getDate();
  const dayOfWeek = (day) => {
    switch (day) {
      case 0: return '星期日';
      case 1: return '星期一';
      case 2: return '星期二';
      case 3: return '星期三';
      case 4: return '星期四';
      case 5: return '星期五';
      case 6: return '星期六';
      default: return '';
    }
  };
  return `${year}/${month}/${dayOfMonth} | ${dayOfWeek(date.getDay())}`.toString();
}

打印的内容:图片描述

谷歌浏览器的时间显示:图片描述

苹果浏览器的时间显示:图片描述

阅读 4.2k
5 个回答
Time.replace(/-/g, '/');

// ps: 楼主把代码格式化下...这乱的...

// 补充
safari下是可用的呀

clipboard.png

timeStr = timeStr.replace(/-/g, '/')
因为ios和安卓的时间格式不一致。

ios的newDate()方法转译string字符串的时候不支持"-"

应大佬 ars_qu 的评论, 我用moment修改了2019-10-31T16:00:00.000+0000这个格式就可以了。图片描述

重写Date https://www.jianshu.com/p/dc8...

     /**
     * 在Safari和IE8上执行 new Date('2017-12-8 11:36:45'); 会得到Invalid Date
     * 本函数重写默认的Date函数,以解决其在Safari,IE8上的bug
     */
    Date = function (Date) {
      MyDate.prototype = Date.prototype;
      return MyDate;

      function MyDate() {
        // 当只有一个参数并且参数类型是字符串时,把字符串中的-替换为/
        if (arguments.length === 1) {
          let arg = arguments[0];
          if (Object.prototype.toString.call(arg) === '[object String]' && arg.indexOf('T') === -1) {
            arguments[0] = arg.replace(/-/g, "/");
            // console.log(arguments[0]);
          }
        }
        let bind = Function.bind;
        let unbind = bind.bind(bind);
        return new (unbind(Date, null).apply(null, arguments));
      }
    }(Date);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题