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

use*_*142 173 javascript date

我正在尝试使用以下格式将dd-mm-yyyy格式的字符串转换为JavaScript中的日期对象:

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);
Run Code Online (Sandbox Code Playgroud)

("#datepicker").val()包含dd-mm-yyyy格式的日期.当我执行以下操作时,我会收到"无效日期":

alert(f);
Run Code Online (Sandbox Code Playgroud)

这是因为' - '符号吗?我怎么能克服这个?

Adr*_*nch 297

拆分" - "

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

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Run Code Online (Sandbox Code Playgroud)

使用正则表达式

var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))
Run Code Online (Sandbox Code Playgroud)

为什么不使用正则表达式?

因为你知道你将使用由连字符分隔的三个部分组成的字符串.

但是,如果你在另一个字符串中寻找相同的字符串,那么正则表达式就是你要走的路.

重用

因为您在示例代码中执行此操作不止一次,并且可能在代码库中的其他位置执行此操作,所以将其包装在函数中:

function toDate(dateStr) {
  var parts = dateStr.split("-")
  return new Date(parts[2], parts[1] - 1, parts[0])
}
Run Code Online (Sandbox Code Playgroud)

用作:

var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)
Run Code Online (Sandbox Code Playgroud)

或者如果你不介意你的函数中的jQuery:

function toDate(selector) {
  var from = $(selector).val().split("-")
  return new Date(from[2], from[1] - 1, from[0])
}
Run Code Online (Sandbox Code Playgroud)

用作:

var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
Run Code Online (Sandbox Code Playgroud)

现代JavaScript

如果你能够使用更现代的JS,阵列解构也是一个不错的选择:

const toDate = (dateStr) => {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}
Run Code Online (Sandbox Code Playgroud)

  • 选择的答案与产生错误日期的错误.真棒! (12认同)
  • 打败了我...但我仍然使用DateJs.由于栅栏贴错误,这不完全正确.月份为0-11,因此您需要减去1. f =新日期(从[2],从[1] -1,从[0]); (9认同)
  • 干杯@kasdega - 前一段时间编辑过它! (3认同)

epa*_*llo 133

正则表达式示例:

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

  • 同样采用`/`的修订是分隔符,一年由2位数字组成(或任何大于1的计数):`replace(/(\ d {2})[ - /](\ d {2})[ - /](\ d +)/,"$ 2/$ 1/$ 3")` (8认同)

Joe*_*Joe 14

另一种可能性

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

匹配数字并重新排序


Dio*_*ane 9

使用以下格式: myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00

  • @Diodeus 即使最后一次编辑,这对我来说也不太有效(至少对于 Chrome 来说)。它将日期设置为“2011-01-03”,将 UTC 时间设置为“00:00:00”。因此,如果用户的时区小于 UTC,则实际上是前一天。 (6认同)

Saa*_*an. 6

var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);
Run Code Online (Sandbox Code Playgroud)

  • 你得到Date.parseDate吗? (3认同)

Mak*_*kah 6

使用moment.js示例:

var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)
Run Code Online (Sandbox Code Playgroud)