我正在尝试使用以下命令将 dd-mm-yyyy 格式的字符串转换为 JavaScript 中的日期对象:
var from = $("#datepicker").val(); var to = $("#datepickertwo").val(); var f = new Date(from); var t = new Date(to);
("#datepicker").val()包含格式为 dd-mm-yyyy 的日期。当我执行以下操作时,我得到“无效日期”:
("#datepicker").val()
alert(f);
这是因为’-‘符号吗?我该如何克服呢?
拆分“-”
将字符串解析为您需要的部分:
var from = $("#datepicker").val().split("-") var f = new Date(from[2], from[1] - 1, from[0])
使用正则表达式
var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))
为什么不使用正则表达式?
因为您知道您将处理由三部分组成的字符串,由连字符分隔。
但是,如果您要在另一个字符串中查找相同的字符串,那么正则表达式将是您的最佳选择。
重用
因为您在示例代码中多次执行此操作,并且可能在代码库的其他地方执行此操作,所以将其包装在一个函数中:
function toDate(dateStr) { var parts = dateStr.split("-") return new Date(parts[2], parts[1] - 1, parts[0]) }
用作:
var from = $("#datepicker").val() var to = $("#datepickertwo").val() var f = toDate(from) var t = toDate(to)
或者,如果您不介意函数中的 jQuery:
function toDate(selector) { var from = $(selector).val().split("-") return new Date(from[2], from[1] - 1, from[0]) }
var f = toDate("#datepicker") var t = toDate("#datepickertwo")
现代 JavaScript
如果您能够使用更现代的 JS,数组解构也是一个不错的选择:
const toDate = (dateStr) => { const [day, month, year] = dateStr.split("-") return new Date(year, month - 1, day) }