Конвертировать строку dd-mm-yyyy в дату - PullRequest
164 голосов
/ 22 августа 2011

Я пытаюсь преобразовать строку в формате дд-мм-гггг в объект даты в JavaScript, используя следующее:

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);

("#datepicker").val() содержит дату в формате дд-мм-гггг.Когда я делаю следующее, я получаю «Неверная дата»:

alert(f);

Это из-за символа «-»?Как я могу преодолеть это?

Ответы [ 13 ]

280 голосов
/ 22 августа 2011

Разделить на "-"

Разобрать строку на нужные вам части:

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, деструктуризация массива также очень приятна:

function toDate(dateStr) {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}
132 голосов
/ 22 августа 2011

Пример регулярного выражения:

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
14 голосов
/ 22 августа 2011

Другая возможность:

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

Сопоставьте цифры и измените их порядок

6 голосов
/ 12 апреля 2017

Использование moment.js пример:

var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)
6 голосов
/ 22 августа 2011
var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);
3 голосов
/ 04 апреля 2017

В моем случае

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

Результат: понедельник, 02 ноября 2015 года, 04:40:13 GMT + 0100 (CET) затем я использую .getTime () для работы с миллисекундами

3 голосов
/ 22 августа 2011

Вы также можете написать дату в скобках объекта Date(), например:

new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)
3 голосов
/ 22 августа 2011

Используйте этот формат: myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00

2 голосов
/ 22 августа 2011

Вы можете использовать внешнюю библиотеку, чтобы помочь вам.

http://www.mattkruse.com/javascript/date/source.html

getDateFromFormat(val,format);

Также смотрите это: Разобрать строку DateTime в JavaScript

1 голос
/ 22 августа 2011

Посмотрите на Datejs для всех этих мелких проблем, связанных с мелкой датой. Вы можете решить это тоже с помощью функции parseDate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...