如何在React中基于MongoDB的createdAt高效显示24小时内新帖子徽章?
解决方案
不要依赖fromNow()返回的字符串判断,这种方式完全不可靠——不仅会受语言环境影响,还会漏掉“几秒前”“几分钟前”这类场景。正确的做法是直接基于时间戳的差值进行判断:
方法1:使用isAfter判断时间范围
通过创建“24小时前”的时间节点,直接判断帖子的发布时间是否在这个节点之后:
{moment(post.createdAt).isAfter(moment().subtract(24, 'hours')) && ( <span className="new-post">new post</span> )}
方法2:使用diff计算时间差
直接计算当前时间与发布时间的小时差,判断是否小于24:
{moment().diff(post.createdAt, 'hours') < 24 && ( <span className="new-post">new post</span> )}
为什么这两种方法更好?
- 完全不依赖格式化后的文本内容,避免了字符串匹配的各种漏洞;
- 能覆盖所有24小时内的时间场景:从几秒前到23小时59分59秒前的帖子都会正确显示徽章;
- 逻辑清晰,代码可读性更强,也更容易维护。
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

