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

IT技术 javascript date
2021-01-22 00:18:44

我正在尝试使用以下方法将 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);

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

6个回答

在“-”上拆分

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

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)
}
选择的答案有一个产生错误日期的错误。惊人的!
2021-03-14 00:18:44
打败我......但我仍然使用DateJs。由于栅栏柱错误,这并不完全正确。月份是 0-11,所以你需要减去 1。 f = new Date(from[2], from[1]-1, from[0]);
2021-03-17 00:18:44
@Adrian Lynch 现代 JavaScript 选项很棒!谢谢你。
2021-04-04 00:18:44
干杯@kasdega - 编辑它......不久前!
2021-04-07 00:18:44
@AdrianLynch 如何在 javascript 中将“月 dd,yyyy”转换为“MM/dd/yyyy”?
2021-04-09 00:18:44

正则表达式示例:

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
@NeerajSingh 如何在 javascript 中将“月 dd,yyyy”转换为“MM/dd/yyyy”?
2021-03-16 00:18:44
采用非数字分隔符、不带前导零的日期和 2 或 4 位年份的修订版:new Date( "23. 2. 15".replace( /(\d+)[^d]+(\d+)[^d]+(\d+)/, "$2/$1/$3") ); en.wikipedia.org/wiki/Date_format_by_country
2021-03-18 00:18:44
为什么这应该是选定的答案@AdemirNuno?为什么将 RegEx 用于已知格式的字符串?您不是在寻找模式,您知道第一个数字是日,第二个数字是月份,第三个数字是年。在这种情况下,RegEx 是错误的工作工具。
2021-03-25 00:18:44
真是太练了,谢谢。我的日期格式随时间而来,所以我将其重新编码为:'new Date("13-01-2011".replace( /(\d{2})-(\d{2})-(\w)/ , "$2/$1/$3") );' 这样对吗?
2021-03-29 00:18:44
同样需要的修订/是分隔符和由 2 位数字组成的年份(或任何大于 1 的计数):replace( /(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3")
2021-04-01 00:18:44

另一种可能:

var from = "10-11-2011"; 
var numbers = from.match(/\d+/g); 
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);

匹配数字并重新排序

@epascarello 如何在 javascript 中将“月 dd,yyyy”转换为“MM/dd/yyyy”?
2021-03-24 00:18:44
原始问题也指定了“dd-mm-yyyy”,而不是“mm-dd-yyyy”,所以它仍然是错误的(但只是错误)。
2021-03-31 00:18:44
var date = new Date(numbers[2], numbers[1]-1, numbers[0]);
2021-04-08 00:18:44

使用moment.js示例:

var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)
时刻(来自,“DD-MM-YYYY”)。toDate()
2021-04-07 00:18:44
var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);
你得到 Date.parseDate 了吗?
2021-03-11 00:18:44
您应该使用$.datepicker.parseDate("dd-mm-yy", from);正确解析日期,例如api.jqueryui.com/datepicker 上的 chek datepicker24-01-2017文档
2021-03-17 00:18:44
@kasdega 对不起,我在想 $.datepicker.parseDate,现在修复它:)
2021-04-04 00:18:44