js日期格式化兼容IOS

问题:IOS/safari设备上,接口返回日期为字符串格式「 yyyy-MM-dd hh:mm:ss」, 经过new Date(str)后会出现Nan
解决:将分隔符 " - " 转为 " / "

▍日期格式化

 Date.prototype.Format = function (fmt) { //author: meizz
  const o = {
    "M+": this.getMonth() + 1, //月份
    "d+": this.getDate(), //日
    "h+": this.getHours(), //小时
    "m+": this.getMinutes(), //分
    "s+": this.getSeconds(), //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    "S": this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (let k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
};

▍格式化前进行数据处理

var formatDate = function (dateStr, formatter) {
  if (!dateStr) {
    return "";
  }
 
  if (typeof dateStr === "string") {
    if (dateStr.indexOf(".") > -1) {
      // 有些日期接口返回带有.0。
      dateStr = dateStr.substring(0, dateStr.indexOf("."));
    }
    // 解决IOS上无法从dateStr parse 到Date类型问题
    dateStr = dateStr.replace(/-/g, '/');
  }
  return new Date(dateStr).Format(formatter);
};

▍调用方式

// 将 1980-02-03 22:22:22 格式化成 1980年02月03日
var result = formatDate('1980-02-03 22:22:22', 'yyyy年MM月dd日');

你可能感兴趣的:(js日期格式化兼容IOS)