用JavaScript解析的棘手日期字符串

时间:2018-05-13 03:56:56

标签: javascript

Fri Nov 10 05:45:36 +0000 2017

我已尝试过时刻和计时节点。两者都被这种日期格式所困扰。

获取有效UTC日期的任何建议?

由于

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我认为这应该会帮助你:

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

答案 2 :(得分: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>

答案 3 :(得分:0)

您可以看到我编写的代码返回的每个数组的两个项目之间的差异,以处理您提供的表单的日期字符串。

最后,您可以查看给出的完整代码示例。

  

在第一种情况下,两者都是相同的。

     

在第二种情况下,两者都不同。

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

很明显我们的UTC转换工作正常。

请查看下面的代码示例并尝试了解。这很简单。

  

注意»函数内的所有注释均为inputDateStr“Fri Nov 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 - Date processing functions

感谢。