Получить отдельные параметры даты объекта Date

115
25 декабря 2020, 03:00

На клиенте в браузере получаю дату:

var day = Date(list.CreationDate);

list.CreationDate - это переменная с сервера, имеющая там тип DateTime и приходящая на клиент ajax запросом.

Если в консоли браузера набрать day, то получаем

"Sat Jan 16 2016 18:24:17 GMT+0300 (Russia TZ 2 Standard Time)"

Т.е. вроде как day содержит дату

если в консоли набрать day.getDay(), то получаем:

TypeError: day.getDay is not a function

Ожидалось, что получу число дня.

Что делаю не так?

Это нужно для того, чтобы распарсить дату и преобразовать её в строку вида xx.xx.xxxx (день.месяц.год)

Answer 1

Используйте getDate() для получения дня месяца.

// a = new Date(list.CreationDate)
a = new Date("Sat Jan 16 2016 18:24:17 GMT+0300 (Russia TZ 2 Standard Time)");
console.log(a.getDate() +'/'+ (a.getMonth() + 1) +'/'+ a.getFullYear());

Результат:

16/1/2016
Answer 2

Это известная проблема с сериализацией даты. Когда дата сериализуется стандартными средствами получается строка следующего вида

 /Date(число)/

где число - это unixtimestamp сериализованной даты. Если это число передать в конструктор Date, то создастся дата соответствующая той, которую сериализовали.

Решений может быть несколько:

  1. Выдрать число и передать в конструктор, например с помощь регулярных выражений

    new Date(parseInt('/Date(1452866810857)/'.match(/\d+/)[0],10))
    //Fri Jan 15 2016 17:06:50 GMT+0300 (RTZ 2 (зима))
    

    для случая из вопроса

    var day = new Date(parseInt(list.CreationDate.match(/\d+/)[0],10));
    
  2. Отправлять сразу данный timestamp - это количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года. Тогда код упростится до

    var day = new Date(list.CreationDate);
    
  3. Либо отправлять дату переведенную в ISO формат, в этом случае можно использовать не только конструктор, но и метод parse

По поводу вашего варианта:
В справке по функции Date

Обратите внимание: объекты Date могут быть созданы только путём вызова функции Date в качестве конструктора: обычный вызов функции (то есть, без использования оператора new) вернёт строку вместо объекта Date; в отличие от других объектных типов JavaScript, объекты Date не имеют литерального синтаксиса.

Таким образом, выполняя

var day = Date(list.CreationDate);

получаем в day - строку, а не дату.

Answer 3

console.log(list.CreationDate) - показало /Date(1452866810857)/

Если так, то, сам list.CreationDate – объект Date. Попробуйте:

var dateString = 
  ('0' + list.CreationDate.getDate()).slice(-2) + '.'
  + ('0' + (list.CreationDate.getMonth()+1)).slice(-2) + '.'
  + list.CreationDate.getFullYear(); // 15.01.2016
READ ALSO
React - бесконечный render

React - бесконечный render

В componentDidUpdate делаю второй поход за данными, что бы после добавления новой задачи( компонент AddTaskInput), изменения статуса или удаления (компонент...

188
Асинхронное движение изображений в js (canvas)

Асинхронное движение изображений в js (canvas)

Предположим имеется 1 изображение машиныНеобходимо создать два объекта Image с этой машиной и двигать эти два изображения асинхронно

128
Что именно идентифицирует посетителя сайта?

Что именно идентифицирует посетителя сайта?

Изучая backend, столкнулся с такой проблемой недопонимания: есть сайт, сервер Nodejs (в принципе, какой угодно, но меня интересует именно Nodejs) и зашел...

114
Настройка JqueryUi slider pips

Настройка JqueryUi slider pips

Никак не получается добиться желаемого результата со slider-ом жуквэриЕсть шаг в 5, хотелось бы получить labels в виде 1,5,10,15,20 и т

123