Преобразование строки в дату в JavaScript - PullRequest
546 голосов
/ 11 апреля 2011

Как я могу преобразовать строку в дату в JavaScript?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt

Ответы [ 32 ]

699 голосов
/ 11 апреля 2011

Лучшим форматом строки для разбора строки является формат ISO даты вместе с конструктором объекта JavaScript Date.

Примеры формата ISO: YYYY-MM-DD или YYYY-MM-DDTHH:MM:SS.

Но подождите! Само по себе использование «формата ISO» не работает надежно само по себе.Строка иногда анализируется как UTC, а иногда как местное время (в зависимости от поставщика и версии браузера).Рекомендуется всегда хранить даты в формате UTC и выполнять вычисления в формате UTC.

Для анализа даты в формате UTC добавьте Z - например: new Date('2011-04-11T10:20:30Z').

Чтобы отобразить дату в формате UTC, используйте .toUTCString(),
, чтобы отобразить дату по местному времени пользователя, используйте .toString().

Подробнее о MDN |Date и этот ответ .

Для старой совместимости с Internet Explorer (версии IE менее 9 не поддерживают формат ISO в конструкторе Date), вы должны разделить представление строки datetime на его частиа затем вы можете использовать конструктор, используя части даты и времени, например: new Date('2011', '04' - 1, '11', '11', '51', '00').Обратите внимание, что номер месяца должен быть на 1 меньше.


Альтернативный метод - используйте соответствующую библиотеку:

Вы также можете воспользоваться библиотекой Moment.js , позволяющий анализировать дату с указанным часовым поясом.

230 голосов
/ 03 апреля 2014

К сожалению, я узнал, что

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

возвращает «Ср 2 апреля 2014».Я знаю, это звучит безумно, но это случается с некоторыми пользователями.

Пуленепробиваемое решение :

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());
108 голосов
/ 26 апреля 2013
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

И на выходе будет:

dt => Date {Fri Apr 26 2013}
75 голосов
/ 21 сентября 2014
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
31 голосов
/ 11 апреля 2011

Передать его в качестве аргумента Date ():

var st = "date in some format"
var dt = new Date(st);

Вы можете получить доступ к дате, месяцу, году, используя, например: dt.getMonth().

22 голосов
/ 07 марта 2016

moment.js (http://momentjs.com/) - это полный и хороший пакет для дат использования и поддерживает строки ISO 8601 .

Вы можете добавить строковую дату и формат.

moment("12-25-1995", "MM-DD-YYYY");

И вы можете проверить, является ли дата действительной.

moment("not a real date").isValid(); //Returns false

см. Документацию http://momentjs.com/docs/#/parsing/string-format/

Рекомендация: Я рекомендую использовать пакет для дат, который содержит много форматов, потому что временная зона и форматирование - это действительно большая проблема, в то время как js решает множество форматов. Вы можете легко разобрать дату из простой строки в дату, но я думаю, что это тяжелая работа для поддержки всех форматов и вариаций дат.

18 голосов
/ 11 апреля 2011

new Date(2000, 10, 1) выдаст вам «Ср 01 Ноя 2000 00:00:00 GMT + 0100 (CET)»

Посмотрите, что 0 за месяц дает вам январь

17 голосов
/ 22 сентября 2014

Если вы можете использовать потрясающую библиотеку moment (например, в проекте Node.js), вы можете легко проанализировать дату, используя, например,

var momentDate = moment("2014-09-15 09:00:00");

и получить доступ к объекту даты JS.через

momentDate ().toDate();
11 голосов
/ 26 июля 2016

Для тех, кто ищет крошечное и умное решение:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

Пример:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
11 голосов
/ 21 августа 2016

метки времени должны быть приведены к числу

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...