【问题标题】:What is wrong with this piece of date formatting code using MomentJS?这段使用 MomentJS 的日期格式化代码有什么问题?
【发布时间】:2020-07-17 15:05:36
【问题描述】:

下面的代码是不言自明的,但它没有按预期工作。如果相差 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 前”。

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

【问题讨论】:

标签: javascript datetime momentjs


【解决方案1】:

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`
  }
}

【讨论】:

  • 嗯,有道理。谢谢@epascarello。我一直被告知,在 if-else 语句较长的情况下,使用 switch-case 是有意义的,但很高兴知道在某些情况下 if-else 会更好。
【解决方案2】:

在 Javascript 中,switch statement 评估案例的值,条件链可能适合您的案例,请尝试以下操作:

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

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

    // this would be your "default"
    return `${moment().diff(moment(time), 'years')}y ago`
}

【讨论】:

  • 是的,谢谢@GMaiolo。我一直使用 switch-case 作为条件链的替代品,因为我认为它们可以替代条件链。但很高兴知道 switch-case 在这种情况下会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2015-04-25
  • 2018-09-09
相关资源
最近更新 更多