Хитрая строка даты для анализа в JavaScript

1

Fri Nov 10 05:45:36 +0000 2017

Я пробовал и момент, и хроноузел. Этот формат датируется обоими.

Любые предложения по получению действительной даты UTC?

Спасибо

  • 2
    Что именно ты попробовал с Моментом?
Теги:

4 ответа

2
Лучший ответ

Чтобы добавить к ответу @CertainPerformance, проблема с вашим кодом, если вы попытаетесь с помощью MomentJS, состоит в том, что это не стандартная строка даты ISO. Анализ его без указания формата приведет к неправильному результату и предупреждению:

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release.

Чтобы смягчить, всегда передавайте формат конструктору MomentJS следующим образом:

const inputStr = "Fri Nov 10 05:45:36 +0000 2017"
const mom = moment(inputStr, 'ddd MMM D HH:mm:ss ZZ YYYY');
console.log(mom.toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
0

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

Наконец, вы можете посмотреть полный приведенный пример кода.

В первом случае оба они одинаковы.

Во втором случае оба они разные.

console.log(dateArr1); // [ '2017-11-10', '2017-11-10' ];
console.log(dateArr2); // [ '2018-05-15', '2018-05-14' ];

Таким образом, это ясно, что конвертация UTC работает нормально.

Пожалуйста, ознакомьтесь с приведенным ниже примером кода и попытайтесь понять. Это просто.

Примечание " Все комментарии внутри функции для inputDateStr: " Пт ноя 10 05:45:36 +0000 2017 "

// All the comments inside function are for 
// inputDateStr: "Fri Nov 10 05:45:36 +0000 2017"
function getMyUTCDate(inputDateStr)
{
    var inputDateString = inputDateStr;
    var date = new Date(inputDateString);
    var dateArr = []; // To store 2 dates, simple one & full UTC one

    console.log(date); // 2017-11-10T05:45:36.000Z

    // ............... SIMPLE EXAMPLE ..........................
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();
    var hours = date.getHours();
    var minutes = date.getMinutes()
    var seconds = date.getSeconds();

    console.log(year);  // 2017
    console.log(month); // 10
    console.log(day);   // 10
    console.log(hours); // 11
    console.log(minutes); // 15
    console.log(seconds); // 36

    utcDate = new Date(Date.UTC(year, month, day, hours, minutes, seconds));
    utcDateString = utcDate.toUTCString();
    console.log(utcDate);       // 2017-11-10T11:15:36.000Z
    console.log(utcDateString); // Fri, 10 Nov 2017 11:15:36 GMT
    var dt1 = utcDate.toISOString().split('T')[0]
    dateArr.push(dt1)
    console.log(dt1); // 2017-11-10

    // .................. FULL UTC EXAMPLE ..........................
    var utcYear = date.getUTCFullYear();
    var utcMonth = date.getUTCMonth();
    var utcDay = date.getUTCDate();
    var utcHours = date.getUTCHours();
    var utcMinutes = date.getUTCMinutes()
    var utcSeconds = date.getUTCSeconds();

    console.log(utcYear);   // 2017
    console.log(utcMonth);  // 10
    console.log(utcDay);    // 10
    console.log(utcHours);  // 5
    console.log(utcMinutes);// 45
    console.log(utcSeconds);// 36

    var utcDate2 = new Date(Date.UTC(utcYear, utcMonth, utcDay, utcHours, utcMinutes, utcSeconds));
    var utcDateString2 = utcDate2.toUTCString();
    console.log(utcDate2);          // 2017-11-10T05:45:36.000Z
    console.log(utcDateString2);    // Fri, 10 Nov 2017 05:45:36 GMT

    // Get UTC Date
    var dt2 = utcDate2.toISOString().split('T')[0]
    dateArr.push(dt2)
    console.log(dt2); // 2017-11-10

    return dateArr;
}

// Inputs
var inputDateString1 = "Fri Nov 10 05:45:36 +0000 2017";
var inputDateString2 = "Mon May 14 23:59:36 +0000 2018";

var dateArr1 = getMyUTCDate(inputDateString1);
var dateArr2 = getMyUTCDate(inputDateString2);

// Print dates
console.log(dateArr1); // [ '2017-11-10', '2017-11-10' ]
console.log(dateArr2); // [ '2018-05-15', '2018-05-14' ]

Рекомендации

developer.mozilla.org - Функции обработки данных

Благодарю.

0

Я думаю, что это должно помочь вам:

var date = new Date("Fri Nov 10 05:45:36 +0000 2017").toISOString();
date = date.split("T")[0];
console.log(date);
0

Момент работает отлично:

const inputStr = "Fri Nov 10 05:45:36 +0000 2017"
const mom = moment(inputStr, 'ddd MMM D HH:mm:ss ZZ YYYY');
console.log(mom.toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
  • 2
    Тогда вам нужно проголосовать за закрытие No-Repro.
  • 0
    Я думаю, что было бы лучше сделать это HH:mm:ss так как нет AM / PM для разбора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню