使用fakerjs date.birthdate()设置max/min时如何获取4位年份
错误原因
faker.date.birthdate()的参数存在模式区分,未显式指定参数模式时,方法默认使用date模式,此模式下min和max接收的参数类型为日期对象或毫秒级Unix时间戳。直接传入数字70、1时,参数会被识别为距离1970-01-01 00:00:00 UTC偏移1毫秒、70毫秒的时间点,换算后为公元元年附近的日期,因此会返回37、79这类两位数甚至个位数的公元年份。
无参调用时方法会加载默认配置,自动将年龄范围设为18~100岁,因此返回结果符合4位年份的预期。
正确实现方式
两种写法都可以满足生成1~70岁之间随机出生日期的需求:
- 写法1:显式指定年龄模式,直接传年龄数值
const birthdate = faker.date.birthdate({ min: 1, max: 70, mode: 'age' // 声明传入的min/max是年龄值,不是时间戳 }); // 输出正常4位年份,例如1979、2012 console.log(birthdate.getFullYear());
- 写法2:手动计算日期边界,传入date模式要求的日期对象
const today = new Date(); // 最早出生日期:70年前的今天 const earliestDate = new Date(today.getFullYear() - 70, today.getMonth(), today.getDate()); // 最晚出生日期:1年前的今天 const latestDate = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate()); const birthdate = faker.date.birthdate({ min: earliestDate, max: latestDate }); // 输出正常4位年份 console.log(birthdate.getFullYear());
提示:如果不指定mode参数,无论传入数字还是日期对象,方法都会优先按时间边界解析,传纯数字必然会得到远古日期。
内容的提问来源于stack exchange,提问作者Mixchange
相关产品推荐
相关产品推荐

