如何使用date-fns从毫秒级Unix时间戳中剥离日期仅保留时分秒?
使用date-fns提取仅含时分秒的时间戳(基于毫秒级Unix时间戳)
当然可以用date-fns实现这个需求,核心思路是计算目标时间与当天0点的时间差,这个差值就是仅代表时分秒的毫秒数,可直接用于跨日期的时间比较。下面是两种可行的实现方式:
方法一:手动提取时分秒计算
- 先将毫秒级时间戳转换为日期对象(注意
fromUnixTime接受的是秒级时间戳,所以需要先把毫秒数除以1000):
import { fromUnixTime } from 'date-fns'; const msTimestamp = 1699999999000; // 示例毫秒级时间戳 const dateObj = fromUnixTime(msTimestamp / 1000);
- 用date-fns的时间提取函数获取时分秒,再计算对应的总毫秒数:
import { getHours, getMinutes, getSeconds } from 'date-fns'; const hours = getHours(dateObj); const minutes = getMinutes(dateObj); const seconds = getSeconds(dateObj); // 得到仅含时分秒的毫秒级时间戳(范围0~86399999) const timeOnlyTimestamp = hours * 3600000 + minutes * 60000 + seconds * 1000;
方法二:用date-fns工具函数直接计算时间差
这种方式更简洁,避免手动计算出错:
import { fromUnixTime, startOfDay, differenceInMilliseconds } from 'date-fns'; const msTimestamp = 1699999999000; const dateObj = fromUnixTime(msTimestamp / 1000); // 获取当天0点的日期对象 const dayStart = startOfDay(dateObj); // 计算目标时间与当天0点的毫秒差,即仅含时分秒的时间戳 const timeOnlyTimestamp = differenceInMilliseconds(dateObj, dayStart);
两种方法得到的timeOnlyTimestamp都可以直接用来比较不同日期的时间先后,比如不同日期的14:30:00会得到相同的数值,15:00:00的数值会大于前者。
内容的提问来源于stack exchange,提问作者Nathan Jackson
相关产品推荐
相关产品推荐

