根据身份证号自动生成生日一些年月会少一天?

如题,网上查了说是1986-1991年有夏令时导致日期会少一天,但是用了网上在getBirthday方法上加TimeZone.setDefault(TimeZone.getTimeZone("GMT+08"))这行代码后发现第一次请求的时候还是返回错误的生日,但是第二次请求开始就返回对的生日了,不知道是什么原因?

阅读 2.3k
3 个回答

夏令时只是加1个小时,中国大陆地区实行夏令时的时间段为:

1986年5月4日至9月14日(1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束)
1987年4月12日至9月13日;
1988年4月10日至9月11日;
1989年4月16日至9月17日;
1990年4月15日至9月16日;
1991年4月14日至9月15日。

你所谓转换的问题,大概是这样的,要么是前端传了一个具体的时间给你比如'1986-06-01 00:00:00',要么是你在生成日期的时候,直接把日期'1986-06-01'取了个datetime得到了'1986-06-01 00:00:00',这个时间在『1986年5月4日至9月14日』内,那么getBirthday会减1个小时,你会得到'1986-05-31 23:00:00',看上去日期提前了一天。但是如果一个时间不在夏令时段以内,比如'1986-04-01 00:00:00'这个时间getBirthday就不会减1个小时。

希望能帮助到你。

身份证提取生日,这不是一个截取字符串的问题吗? 怎么还需要计算??

直接从身份证号中截取年/月/日,重新组合一下就可以得到 yyy-MM-DD 格式的生日,不需要用到日期处理函数啊。

const id = "11010119900307969X";    // 这是一个随机生成的身份证号
const birthday = `${id.slice(6, 10)}-${id.slice(10, 12)}-${id.slice(12, 14)}`;

console.log(birthday);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题