簡體   English   中英

如何在JavaScript中比較兩種不同的日期格式和不同的時區?

[英]How can I compare two different date formats and different time zones in JavaScript?

我想比較以不同格式和時區給出的兩個不同的時間對象。

輸入為結構化英文:

IF "Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)" is greater than "2014-09-04T13:57:33.338Z"

預期產量:

True

如何用JavaScript實現呢?

在JavaScript中,使用Date.parse(myDateObject)將不同的日期格式轉換為Unix時間戳(盡管最后的3位數字不是unix時間戳的一部分,而是毫秒)。

例如:

if (Date.parse("Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)") > Date.parse("2014-09-04T13:57:33.338Z")) {}; // evaluates to true

本機JavaScript

您可以使用Date.parse(dateObject)將日期轉換為Unix時間戳並對其進行測試。 您可以查看有關它文檔

使用附加庫

您還可以使用外部庫,例如Moment.js 該庫使您可以比較日期,而無需將其轉換為時間戳或其他非常規格式。

您只需要獲取日期並將其與另一個日期進行比較即可:

moment("Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)").isAfter('2014-09-04T13:57:33.338');

如果您願意,我可以讓您自己探索這個奇妙的圖書館。

Moment網站: http//momentjs.com/

希望這兩個解決方案可以為您提供幫助:)

不要期望Date對象正確或一致地解析日期和時間字符串。 如果您要支持許多不同的格式,則有很多庫可以提供幫助,但是如果您只有一種或兩種,那么支持它們並不難。

要解析UTC ISO 8601格式的字符串,例如“ 2014-09-04T13:57:33.338Z”:

function parseISOUTC(s) {

  // Get the parts
  var b = s.split(/\D+/);

  // Return a new Date
  return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5], b[6]));
}

要解析“ Mon Sep 15 2014 18:20:52 GMT + 0200(CEST)”這樣的字符串,需要做更多的工作:

function parseMDYHMSO(s) {

  // Get the parts
  var b = s.split(/[ :]/);

  // Convert the month name to a number
  var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,
                jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
  var month = months[b[1].toLowerCase()];

  // Get the offset
  var sign = s.indexOf('+') == -1? 1 : -1;
  var offset = b[7].substr(4,2) * 60;
  offset += +b[7].substr(6,2);

  // Create a new Date
  return new Date(Date.UTC(b[3], month, b[2], b[4], +b[5] + sign*offset, b[6]));
}

因此,現在您有兩個日期對象。 如果只想比較時間部分,則獲取每個部分的小時,分​​鍾和秒,然后進行比較:

var d0 = parseISOUTC('2014-09-04T13:57:33.338Z');

// 2014-09-15T16:20:52.000Z
var d1 = parseMDYHMSO('Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)');

d0.getUTCHour(); // 13
d1.getUTCHour(); // 16

d0.getUTCMin(); // 57
d1.getUTCMin(); // 20

d0.getUTCMin(); // 33
d1.getUTCMin(); // 52

您也可以只使用普通的getHourgetMinute等方法,但UTC可以清楚地表明您使用的是相同的偏移量。

您也可以只使用帶偏移的時間部分來執行上述操作,而忽略日期。 將小時,分鍾和秒轉換為秒,應用偏移量,考慮天邊界並比較結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM