2017-06-01 600 views
-6

如何比較javascript中格式爲yyyyMMdd的HHmmss.SSS的日期,而輸入格式爲格式。我嘗試使用日期分析和其他東西。不幸的是如何在javascript中格式爲yyyyMMdd HHmmss.SSS的日期,而輸入是具有特定格式的日期

+0

分享我們試過的東西。祝你好運:) –

+0

你可以展示你的嘗試和你到底想要什麼嗎? – stevenvanc

+2

如果它們被格式化爲'yyyyMMdd HHmmss.SSS'並且處於相同的時區,則它們應該可以作爲字符串相互比較。你用什麼來比較它們?彼此之間? – cartant

回答

1

一種方法是將日期轉換爲ISO-8601格式,並使用新的Date()加載它們並比較日期。

另一種方式是使用像Moment js(momentjs.com/docs/)這樣的第三方庫。

var m1 = moment(dateStr1, 'YYYYMMDD HHmmss.SSS'); 
var m2 = moment(dateStr2, 'YYYYMMDD HHmmss.SSS'); 

if (m1 == m2) {} 

使用純JS

function toDate(d) { 
    var regex = /(\d{4})(\d{2})(\d{2})\s(\d{2})(\d{2})(\d{2})\.(\d{3})/; 

    var YEAR = 1, MONTH=2, DAY=3, HOUR=4, MIN=5, SEC=6; 
    var parts = date.match(regex); 
    return new Date(`${parts[YEAR]}-${parts[MONTH]}-${parts[DAY] ${parts[HOUR]}:${parts[MIN]}:${parts[SEC]}`); 
} 

var d1 = toDate('20170531 131515.765'); 
+0

對不起,錯過了:) –

+0

嗨bugs_cena。 RobG ..我不能使用時刻相關的功能.IS有沒有其他方法? –

+0

@suryaamalaVungarala請檢查編輯。 –

0

如果「比較日期」你的意思是,如果DATE1早於DATE2(即<>運營商),你有格式會讓你比較作爲字符串:

var a = '20170531 231253.475'; 
 
var b = '20170531 231254.000'; 
 

 
console.log('a is before b? ' + (a.localeCompare(b) < 0)); 
 
console.log('b is before a? ' + (b.localeCompare(a) < 0));

如果要比較他們的日期,你可以很容易解析字符串:

var a = '20170531 231253.475'; 
 
var b = '20170531 231254.000'; 
 

 
// Parse date string in format yyyymmdd HHmmss.SSS 
 
function parseSpecial(t) { 
 
    var y = t.substr(0,4); 
 
    var m = t.substr(4,2); 
 
    var d = t.substr(6,2); 
 
    var h = t.substr(9,2); 
 
    var M = t.substr(11,2); 
 
    var s = t.substr(13,2); 
 
    var S = t.substr(16,3); 
 
    return new Date(y, m-1, d, h, M, s, S); 
 
} 
 
console.log('a is: ' + parseSpecial(a).toString() + 
 
      '\nb is: ' + parseSpecial(b).toString()); 
 
console.log('Is a before b? ' + (parseSpecial(a) < parseSpecial(b))); 
 
console.log('Is b before a? ' + (parseSpecial(b) < parseSpecial(a)));

當然,你應該添加驗證解析器,以確保您比較有效的日期,並提供缺失部分的默認值。