总结关于时间处理方案

接下来总结一下结合项目中遇到的较多时间处理方案
时间戳转化在项目中多处用到,尤其是种草模块涉及较多

时间戳格式化

使用

Helper.dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss')

函数

function dateFormat(date, fmt) {
  var o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds(),
    'q+': Math.floor((date.getMonth() + 3) / 3),
    'S': date.getMilliseconds()
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var 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
}

xx个小时前发布

ios在对于new Date解析的时候存在问题,所以需要做一下处理new Date(time.replace(/-/g,'/')).getTime(),如下所以,以下功能将 2019-4-45 =》几周前

function getDateDiffCountdown(time) {
  let dateTimeStamp = new Date(time.replace(/-/g,'/')).getTime()
  let result = time
  let minute = 1000 * 60
  let hour = minute * 60
  let day = hour * 24
  let month = day * 30
  let now = new Date().getTime()
  let diffValue = now - dateTimeStamp
  if (diffValue < 0) return
  var monthC = diffValue / month
  let weekC = diffValue / (7 * day)
  let dayC = diffValue / day
  let hourC = diffValue / hour
  let minC = diffValue / minute
  if (monthC >= 1) {
    return result
  }
  if (weekC >= 1) {
    result = parseInt(weekC) + "周前"
    return result;
  }
  if (dayC >= 1) {
    result = parseInt(dayC) + "天前"
    return result;
  }
  if (hourC >= 1) {
    result = parseInt(hourC) + "小时前"
    return result;
  }
  if (minC >= 1) {
    result = parseInt(minC) + "分钟前"
    return result
  }
  return "刚刚"
}

活动倒计时时间显示

参数(开始时间,结束时间,输出时间差的格式)

getDateDiff(start, currentTime, 'second') // 活动已经开始xx秒
function getDateDiff(startTime, endTime, diffType) {
  // 将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
  startTime = startTime.replace(/\-/g, '/')
  endTime = endTime.replace(/\-/g, '/')

  // 将计算间隔类性字符转换为小写
  diffType = diffType.toLowerCase()
  var sTime = new Date(startTime) // 开始时间
  var eTime = new Date(endTime) // 结束时间
  // 作为除数的数字
  var divNum = 1
  switch (diffType) {
    case 'second':
      divNum = 1000
      break
    case 'minute':
      divNum = 1000 * 60
      break
    case 'hour':
      divNum = 1000 * 3600
      break
    case 'day':
      divNum = 1000 * 3600 * 24
      break
    default:
      break
  }
  return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum))
}