我试图将格式为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);
这是因为“-”符号吗?我怎样才能克服这个问题呢?
公认的答案有点问题
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
考虑日期选择器是否包含“77-78-7980”,这显然不是一个有效的日期。这将导致:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
这可能不是我们想要的结果。
原因在MDN网站上有解释:
当Date作为一个有多个参数的构造函数被调用时,如果值大于它们的逻辑范围(例如13被提供为月份值,70被提供为分钟值),相邻的值将被调整。例如,new Date(2013,13,1)等价于new Date(2014,1,1)。
更好的解决方法是:
const stringToDate = function(dateString) {
const [dd, mm, yyyy] = dateString.split("-");
return new Date(`${yyyy}-${mm}-${dd}`);
};
console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z
console.log(stringToDate('77-78-7980'));
// Invalid Date
这使您可以处理无效输入。
例如:
const date = stringToDate("77-78-7980");
if (date === "Invalid Date" || isNaN(date)) {
console.log("It's all gone bad");
} else {
// Do something with your valid date here
}