碰到一个很有意思的笔试,趁着1024这个节日,分享给jym看看,节日快乐🤭🤭
😜题目
编写一个名为calculateChildAge
的函数,该函数接收两个字符串参数:birthDateString
(表示宝宝的出生日期,格式为"YYYY-MM-DD")和currentDateString
(表示当前日期,格式同样为"YYYY-MM-DD")。函数需要计算宝宝的年龄,并返回一个对象,该对象包含两个属性:years
(表示宝宝的年龄,以整数年为单位)和months
(表示宝宝年龄中不足一年的部分,以整数月为单位)。
例如,如果birthDateString
为"2014-04-05",currentDateString
为"2017-08-09",则函数应返回{years: 3, months: 4}
,表示宝宝的年龄为3岁4个月。
😍思路
当我们计算日期的时候,就需要使用日期对象(new Date), 计算两个时间的时间差。
- 解析出生日期和当前日期字符串,将它们转换为日期对象。
- 计算两个日期之间的总月份差。
- 根据总月份差计算出完整的年数和剩余的月数。
- 返回一个包含
years
和months
属性的对象。
难点
计算两个年份差不难,主要是计算月份差,我们需要考虑的多:
- 当前月份大于出生月份,这时候正常相减
- 当月份小于出生月份,这时候计算的月份差是小于0的,所以我们就要对age进行–,month就要加12
- 当月份差等于0,并且当期的日期小于出生的日期,也是跟上面一样的操作
/**
* 计算宝宝的年龄(周岁)和月份差
*
* @param babyBirthday 宝宝的出生日期,格式为 'YYYY-MM-DD'
* @param currentDate 当前日期,格式为 'YYYY-MM-DD'
* @returns 返回包含宝宝年龄(周岁)和月份差的对象
*/
function calBabyAge(babyBirthday, currentDate) {
const babyBirth = new Date(babyBirthday);
const current = new Date(currentDate);
let age = current.getFullYear() - babyBirth.getFullYear();
let month = current.getMonth() - babyBirth.getMonth();
// 如果月份差小于0,或者月份差为0
// 但当前日期的日小于出生日期的日,则年龄减1,月份差加12
if (month < 0 || (month === 0 && current.getDate() < babyBirth.getDate())) {
age--;
month += 12;
}
return { age, month };
}
// 测试示例数据
const babyBirthday = "2014-04-05";
const currentDate = "2017-08-09";
console.log(calBabyAge(babyBirthday, currentDate)); // 输出:{ age: 3, month: 4 }
😗总结
这个题目还算是比较简单的,需要考虑的月份差,如果是需要精确到日,那就需要更复杂的逻辑进行处理,jym靠你们了😘😘