JavaScript中如何将字符串转换为Date对象?适配DatePicker场景
嘿,我来帮你搞定这两个JavaScript日期转换的问题,都是前端开发里常遇到的场景哦!
在JS里把字符串转成Date对象有几种实用方法,但要注意不同日期格式的兼容性——毕竟不同浏览器对非标准日期字符串的解析可能有差异:
直接用Date构造函数(仅限标准格式):如果你的字符串是
YYYY-MM-DD、YYYY/MM/DD或者带时间的YYYY-MM-DDTHH:mm:ss这类标准格式,直接传给new Date()就可以:const standardDateStr = "2018-04-12"; const dateObj = new Date(standardDateStr); console.log(dateObj); // 输出对应的Date对象注意:像
DD/MM/YYYY这种非标准格式直接传的话,很多浏览器会把它当成MM/DD/YYYY,很容易解析错误,所以别这么用!手动拆分字符串构造(自定义格式首选):如果你的日期字符串是自定义格式(比如
DD.MM.YYYY、MM-DD-YYYY),最稳妥的方式是手动拆分出年、月、日,再传给Date构造函数——重点提醒:JS里的月份是从0开始计数的,1月对应0,12月对应11,所以月份要减1!const customDateStr = "12.04.2018"; const [day, month, year] = customDateStr.split("."); const dateObj = new Date(year, month - 1, day); console.log(dateObj); // 正确解析为2018年4月12日的Date对象用Date.parse()转时间戳再构造:这个方法会把日期字符串转成Unix时间戳,再用时间戳创建Date对象,不过兼容性和直接用Date构造函数差不多,同样只适合标准格式:
const timestamp = Date.parse("2018-04-12"); const dateObj = new Date(timestamp);
你现在通过var endDate = $('#endDateHistory').val();拿到了"12.04.2018"这种日.月.年格式的字符串,要转成Date对象给DatePicker用,这里给你两种方案:
方案一:手动转换Date对象
直接拆分字符串后构造,代码如下:
// 获取日期字符串 var endDate = $('#endDateHistory').val(); // 值为"12.04.2018" // 拆分出日、月、年 const [day, month, year] = endDate.split("."); // 构造正确的Date对象(月份减1) const dateObj = new Date(year, month - 1, day); // 现在dateObj就可以直接传给DatePicker使用了
方案二:利用DatePicker自身的格式解析(更省心)
如果你用的是jQuery UI DatePicker,其实可以在初始化时指定日期格式,让它自动解析这种字符串,不用手动转换:
// 初始化DatePicker时设置对应的日期格式 $("#yourDatePickerElement").datepicker({ dateFormat: "dd.mm.yy" // 对应"12.04.2018"的格式 }); // 直接设置值,DatePicker会自动转成Date对象 $("#yourDatePickerElement").datepicker("setDate", endDate);
这样就不用自己处理月份减1的问题了,非常方便~
内容的提问来源于stack exchange,提问作者Cagribeyg

