如何用JavaScript/jQuery将dd/mm/yy日期转为mm/dd/yyyy格式
日期格式转换代码修正方案
原有代码失效原因
JS原生Date构造器解析带斜杠的日期字符串时,默认遵循mm/dd/yy的解析规则,你输入的25/12/21中第一个数字25超出了月份的合法范围(1-12),会直接生成无效日期对象,后续获取日、月、年的操作全部失效。
修正方案
直接手动拆分日期字符串处理,不依赖Date的自动解析,兼容性更强、逻辑可控,代码如下:
// 读取date1的输入值 const date1Val = $('#date1').val().trim(); // 按斜杠拆分得到日、月、两位年 const [day, month, shortYear] = date1Val.split('/'); // 处理两位年份,可根据业务调整规则,此处默认两位年小于50归为20xx,否则归为19xx const fullYear = +shortYear < 50 ? '20' + shortYear : '19' + shortYear; // 补零处理月份和日期 const formatMonth = month.length === 1 ? '0' + month : month; const formatDay = day.length === 1 ? '0' + day : day; // 拼接成目标格式赋值给date2 $('#date2').val(formatMonth + '/' + formatDay + '/' + fullYear);
如果需要在date1输入完成后自动转换,可以绑定事件触发:
$('#date1').on('change input', function() { const date1Val = $(this).val().trim(); // 格式校验,不符合规则清空date2 if (!/^\d{1,2}\/\d{1,2}\/\d{2}$/.test(date1Val)) { $('#date2').val(''); return; } const [day, month, shortYear] = date1Val.split('/'); const fullYear = +shortYear < 50 ? '20' + shortYear : '19' + shortYear; const formatMonth = month.padStart ? month.padStart(2, '0') : (month.length === 1 ? '0' + month : month); const formatDay = day.padStart ? day.padStart(2, '0') : (day.length === 1 ? '0' + day : day); $('#date2').val(formatMonth + '/' + formatDay + '/' + fullYear); });
注:上述代码兼容低版本浏览器,无需额外依赖
内容的提问来源于stack exchange,提问作者tonydeleon
相关产品推荐
相关产品推荐

