首页 > 解决方案 > 这段使用 MomentJS 的日期格式化代码有什么问题?

问题描述

下面的代码是不言自明的,但它没有按预期工作。如果有 0 天的差异,它会返回 '0y ago'

const formatTime = (time) => {
    const dayDiff = moment().diff(moment(time), 'days')

    switch (dayDiff) {
        case dayDiff == 0:
            return `${moment().diff(moment(time), 'hours')}h ago`
        case dayDiff > 0 && dayDiff < 31:
            return `${moment().diff(moment(time), 'days')}d ago`
        case dayDiff > 31 && dayDiff < 365:
            return `${moment().diff(moment(time), 'months')}m ago`
        default:
            return `${moment().diff(moment(time), 'years')}y ago`
    }
}

如果时间落在同一天,那么它将以默认情况结束,而它应该以第一种情况结束并返回“0h 前”。

我可能错过了一些小事。任何帮助将非常感激。

标签: javascriptdatetimemomentjs

解决方案


Switch 用于与值进行比较。为了使您的代码正常工作,它需要是

switch(true) {
  case dayDiff == 0:
  ....
}

但在 switch 中使用条件被认为是不好的做法,只需使用 if 语句

const formatTime = time => {
  const dayDiff = moment().diff(moment(time), 'days')
  if (dayDiff == 0) {
    return `${moment().diff(moment(time), 'hours')}h ago`
  } else if (dayDiff < 31) {
    return `${moment().diff(moment(time), 'days')}d ago`
  } else if (dayDiff < 365) {
    return `${moment().diff(moment(time), 'months')}m ago`
  } else {
    return `${moment().diff(moment(time), 'years')}y ago`
  }
}

推荐阅读