javascript - 这段使用 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 前”。
我可能错过了一些小事。任何帮助将非常感激。
解决方案
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`
}
}
推荐阅读
- git - 删除 git 远程分支
- symfony - EasyAdmin 选择字段错误 Symfony
- c++ - Do-while 循环不会在条件处停止,负函数也不会正确计算负整数
- java - SOAP JAVA WSDL - 在请求标头中添加一个值
- r - 在 rmarkdown 中创建可编辑的表
- javascript - 如何消除光线投射器的失真
- python - 如何将图像(字节)转换为 Base64(字符串)Odoo?
- flutter - 如何在颤动中检查长度是否为空?
- python - 启动 RPI 4 后无法在自动启动时使文本转语音工作
- kotlin - 阿卡。如何关闭来自服务器的 websocket 连接?