Javascript 如何在向服务传递日期时支持多种格式

Javascript 如何在向服务传递日期时支持多种格式,javascript,angularjs,datepicker,Javascript,Angularjs,Datepicker,我遇到了一个问题,支持从我的视图提交的日期输入的多种格式 例如,如果用户提交的出生日期为2016年4月3日,它将解析并正常工作 我需要允许用户按上述方式提交,或按2016年3月4日提交,或甚至按2016年3月4日提交 这就是我如何将其设置为转换和发送,作为控制器中有效负载的一部分 DateOfBirth: (new Date($scope.dob)).toJSON() 如前所述,使用03/04/2016格式时效果良好,但如果用户以其他方式输入,我需要提供支持 有人能给我指出正确的方向吗?你可以

我遇到了一个问题,支持从我的视图提交的日期输入的多种格式

例如,如果用户提交的出生日期为2016年4月3日,它将解析并正常工作

我需要允许用户按上述方式提交,或按2016年3月4日提交,或甚至按2016年3月4日提交

这就是我如何将其设置为转换和发送,作为控制器中有效负载的一部分

DateOfBirth: (new Date($scope.dob)).toJSON()
如前所述,使用03/04/2016格式时效果良好,但如果用户以其他方式输入,我需要提供支持

有人能给我指出正确的方向吗?

你可以试试这个lib

在JavaScript中解析、验证、操作和显示日期

moment().format('L');    // 03/04/2016
moment().format('l');    // 3/4/2016
moment(any date).format('DDMMYYYY') // you can to combine format output
moment("12-25-1995", "MM-DD-YYYY");

或者

如果日期中有分隔符,则此操作可能有效

var regEx1 = /^(\d?\d)[\/\.\-](\d?\d)[\/\.\-](\d\d\d\d)$/; //Catch the regular way  
var matches = regEx1.exec($scope.dob);
if (matches && matches.length >= 4) { 
   DateOfBirth: (new Date(matches[3],matches[2],matches[1])).toJSON()
} else {
    alert("Invalid date, please don't forget the delimiters");
}

如果日期中没有分隔符,我认为没有通用的方法来处理这个问题,除非日期正好是6或8位数。

三个不同的输入框是一个选项吗?(日、月、年)。对于这类事情没有神奇的解决方案,所以大多数时候你都会要求用户以特定的格式输入日期。您可以尝试以多种方式解析输入,但您永远不会知道用户将使用的所有格式。
在大多数情况下都非常好,可以为您提供一致的输出。在旧的浏览器中,它应该仍然可以作为文本输入,这并不比你现在使用的更糟糕。听起来……检查日期是否为x/y/zzzz或xx/yy/zzzz格式更容易,如果不是,则强制用户修复。允许XYZZZ或XXYYZZZ(或XYYZZZ)变得更加复杂。更好的是,只要用户输入2位数字,您就可以为他输入/了。我认为您不能这样做。你怎么知道2122016是什么意思?是2016年2月21日还是2016年12月2日?我认为询问者希望以一致的方式将任何输入字符串(格式为dd/mm/yyyy或d/m/yyyy或dmyyyy或ddmmyyyyy)转换为日期对象,以便获得一致的格式传递给服务器。你在这个答案中提供了另一种方式。