我试图将格式为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);

这是因为“-”符号吗?我怎样才能克服这个问题呢?


当前回答

看看Datejs中所有与日期相关的琐碎问题。你也可以用parseDate函数来解决这个问题

其他回答

您可以使用Regexp。

var result = /^(\d{2})-(\d{2})-(\d{4})$/.exec($("#datepicker").val());
if (result) {
    from = new Date(
        parseInt(result[3], 10), 
        parseInt(result[2], 10) - 1, 
        parseInt(result[1], 10)
    );
}

在"-"上分裂

解析字符串为你需要的部分:

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

为什么不用正则表达式?

因为您知道您将处理一个由三部分组成的字符串,由连字符隔开。

然而,如果你在另一个字符串中寻找相同的字符串,regex将是一种方法。

重用

因为你在你的示例代码中做了不止一次,也许在你的代码库的其他地方,把它包装在一个函数中:

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

正则表达式示例:

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

就这么简单,只是把你的日期传递给js的日期对象

您可以使用外部库来帮助您。

http://www.mattkruse.com/javascript/date/source.html

getDateFromFormat(val,format);

还可以看到这个:用JavaScript解析DateTime字符串