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

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


当前回答

对我来说

new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))

结果:2015年11月2日星期一04:40:13 GMT+0100(欧洲中部时间) 然后我使用.getTime()来处理毫秒

其他回答

公认的答案有点问题

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
}
new Date().toLocaleDateString();

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

let dateString = '13-02-2021' //日期字符串dd-mm-yyyy格式 let dateArray = dateString.split("-"); //dateArray[2] = 2021 //dateArray[1] = 02 //dateArray[0] = 13 //使用下面的模板文字 让dateObj = new日期(“$ {dateArray [2]} - $ {dateArray [1]} - $ {dateArray[0]}”); // dateObj等于2021年2月13日星期六05:30:00 GMT+0530(印度标准时间) //我来自印度,所以显示的是GMT+0530

附注:对于基本的MDN或DevDocs,一定要参考文档

正则表达式示例:

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

对我来说

new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))

结果:2015年11月2日星期一04:40:13 GMT+0100(欧洲中部时间) 然后我使用.getTime()来处理毫秒