将 dd-mm-yyyy 字符串转换为日期

2022-08-30 01:13:35

我正在尝试使用以下方法将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 的日期。当我执行以下操作时,我得到“无效日期”:

alert(f);

这是因为“-”符号吗?我该如何克服这个问题?


答案 1

拆分为“-”

将字符串解析为所需的部分:

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)
}

答案 2

正则表达式示例:

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );