比如生日26,就显示今天是您生日,错过了 就计算来年多少天
直接用 dayjs
就行,里面有一个 diff
的API,然后就把你输入的生日去设置一下年份做对比就行了。比如说
import dayjs from 'dayjs'
function getDistance2Birthday(date){
// 原始生日
const birthday = dayjs(date)
// 当前时间
const today = dayjs()
// 今年生日
const curYaerBirthday = birthday.set('year', today.get('year'))
// 今年岁数
const curAge = today.diff(birthday,'year')
// 差距天数
const diffDate = today.diff(curYaerBirthday, 'day')
let msg = `距离您的${curAge}岁生日还有${Math.abs(diffDate)}天。`
if(diffDate === 0) msg = `🎉生日快乐,今天是${birthday.format('M月D日')},您的${curAge}岁生日。`
if (diffDate > 0) msg = `距离您的${curAge}岁生日已经过去了${diffDate}天。`
return msg
}
getDistance2Birthday('2000-11-26')
// '🎉生日快乐,今天是11月26日,您的22岁生日。'
getDistance2Birthday('2000-12-26')
// '距离您的21岁生日还有29天。'
getDistance2Birthday('2000-10-26')
// '距离您的22岁生日已经过去了31天。'
粗略的写了一下,日期没有做校验,也没有没有考虑 2月29日
的情况。
这种特殊日期的生日我没过过不知道是非闰年就过 28
号这样的。
你都可以自己扩展写一下,都是很简单的。
// 计算两个时间差 dateBegin 开始时间
function timeFn(dateBegin) {
//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
var dateEnd = new Date();//获取当前时间
var dateDiff = dateEnd.getTime() - dateBegin;//时间差的毫秒数
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
var leave1=dateDiff%(24*3600*1000) //计算天数后剩余的毫秒数
var hours=Math.floor(leave1/(3600*1000))//计算出小时数
//计算相差分钟数
var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
//计算相差秒数
var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
var seconds=Math.round(leave3/1000)
var leave4=leave3%(60*1000) //计算分钟数后剩余的毫秒数
var minseconds=Math.round(leave4/1000)
var timeFn = "耗时:"+dayDiff+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒"+minseconds+"毫秒";
return timeFn;
}
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
5 回答897 阅读
5 回答1.2k 阅读✓ 已解决
3 回答2.2k 阅读
计算下一个生日很简单,两个日期减一下换算下就行了,其实主要就是校验格式吧,如果要写一个比较完整的实现需要考虑比较多,日期格式应该要支持传入如:
2022-11-26
、2022/11/26
、2022.11.26
、11-26
、2022年11月26日
...等等各式各样的格式,还有日期的准确性,比如2-30
这种,还有如果传入了年份可能还要再加上闰年的逻辑。最核心最难的就是校验入参,计算反倒非常简单,下面只是一个示例,并没有考虑较多的场景,仅供参考PS:对于校验其实讨巧一点可以通过尝试补全格式然后直接调用
new Date()
,看是否能够创建正确时间来校验