9

Парсинг строки в дату в JavaScript

7

Вопрос: Как конвертировать строку в объект Date в JavaScript?

Описание проблемы: Я пытаюсь преобразовать строку, содержащую дату в определенном формате, в объект Date в JavaScript. У меня есть строка, например:

var st = "date in some format";

И я хочу, чтобы dt_st был таким же объектом Date, как dt, который я уже создал:

var dt = new Date();
var dt_st = // преобразование ст в формат Date, аналогично dt.

Как правильно выполнить это преобразование? Существуют ли специфические методы или функции для этого? Буду благодарен за примеры и советы!

5 ответ(ов)

4

К сожалению, я обнаружил, что код

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

возвращает "Wed Apr 02 2014". Звучит странно, но это действительно происходит у некоторых пользователей.

Непробиваемое решение следующее:

var parts ='2014-04-03'.split('-');
// Обратите внимание на месяц (parts[1]); в JavaScript месяцы начинаются с 0:
// Январь - 0, Февраль - 1 и так далее.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());

Используя этот подход, вы можете избежать проблем с неправильной интерпретацией дат в зависимости от локали.

1

В приведенном вами примере кода мы преобразуем строку с датой в формате "дд.мм.гггг" в объект Date в JavaScript.

Вот что делает код:

  1. Создается строка st с датой "26.04.2013".
  2. Используется регулярное выражение pattern для поиска дня, месяца и года в строке.
  3. Метод replace заменяет найденный шаблон на строку в формате "гггг-мм-дд", который более привычен для конструктора Date в JavaScript.
  4. В результате создается объект Date, который хранит дату.

Таким образом, после выполнения кода var dt = new Date(st.replace(pattern,'$3-$2-$1'));, переменная dt будет содержать объект Date:

dt => Date {Fri Apr 26 2013}

Этот объект может быть использован для манипуляций с датой и временем в JavaScript.

0

В указанном вами коде на JavaScript определена функция stringToDate, которая преобразует строку даты в объект Date на основе заданного формата и разделителя. Давайте подробнее рассмотрим, как она работает.

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; // В JavaScript месяцы считаются с 0 (январь) до 11 (декабрь)
    
    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", "-");

Описание работы функции:

  1. Приведение формата к нижнему регистру: Функция начинается с того, что приводит формат даты к нижнему регистру для обеспечения регистронезависимости.

  2. Разделение формата и даты: Формат и строки даты разделяются на части с использованием указанного разделителя. Это позволяет коду работать с разными форматами.

  3. Получение индексов компонентов даты: Далее код определяет индексы для месяца, дня и года в массиве формата, что позволяет находить соответствующие части в строке даты.

  4. Создание объекта Date: После извлечения значений, создается новый объект Date, где учитывается, что месяцы в JavaScript начинаются с 0.

  5. Возврат сформированной даты: Функция возвращает получившийся объект Date, который можно использовать для дальнейших операций с датой.

Примеры вызова:

Функция работает с разными форматами и разделителями, как показано в примерах.

Эта функция упрощает преобразование строковой даты в объект, который можно использовать для различных манипуляций в JavaScript, таких как вычисления с датами или отображение в нужном формате.

0

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

var st = "дата в каком-то формате";
var dt = new Date(st);

Теперь, чтобы получить информацию о дате, месяце и годе, вы можете использовать методы объекта Date, например:

var month = dt.getMonth(); // Получает месяц (от 0 до 11)
var year = dt.getFullYear(); // Получает год (например, 2023)
var day = dt.getDate(); // Получает число месяца (от 1 до 31)

Обратите внимание, что метод getMonth() возвращает месяц, начиная с 0 (январь) до 11 (декабрь).

0

Вот небольшой и умный способ преобразования строки в объект Date с помощью функции toDate, добавленной к прототипу String:

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();
  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");

Эта функция позволяет вам легко преобразовывать строки формата даты и времени в объекты Date, что делает ваш код более удобным и читаемым. Не забудьте, что месяцы в объекте Date индексируются с 0 (январь) до 11 (декабрь).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь