2016-12-29 36 views
2

這個問題已經被問到今天,但業主似乎已經刪除它(即使它有4投票)。然而,這個問題太有趣了,我決定再次發表自己的看法。如何從字符串中確定日期格式?

我有一個Javascript對象,它有一個屬性和日期字符串。

現在我想爲該屬性設置一個新的日期時間,但是如何在不知道其格式的情況下設置新數據?

樣品的日期時間是這樣的「2018-01-01T20:09:00」

這個問題可以在2回答來劃分。

  1. 識別當前所提到的格式&設置相同的格式對象屬性。(這似乎是很容易實現的,如果有人說什麼類型的日期時間格式的就是這個)

  2. 找出一些通用解決方案確定任何日期時間格式&將給定的日期時間轉換爲設置對象屬性。

+0

一個簡單的解決方案可能是:使用日期/時間庫,例如[moment.js](http://momentjs.com/docs/#/parsing/) – dloeda

+1

您不能,至少不可靠。 1/2/2016是1月2日還是2月1日? –

+0

似乎你們不明白需要正確, –

回答

2
var dat = new Date('2018-01-01T20:09:00'); 
console.log(dat.getFullYear()); 
console.log(dat.getUTCHours()); 
console.log(dat.getUTCMinutes()); 
1

如果您可以使用moment.js那麼下面做工作:

var dateFormats = { 
    "iso_int" : "YYYY-MM-DD", 
    "short_date" : "DD/MM/YYYY", 
    "iso_date_time": "YYYY-MM-DDTHH:MM:SS", 
    "iso_date_time_utc": "YYYY-MM-DDTHH:MM:SSZ" 
    //define other well known formats if you want 
} 

function getFormat(d){ 
    for (var prop in dateFormats) { 
     if(moment(d, dateFormats[prop],true).isValid()){ 
      return dateFormats[prop]; 
     } 
    } 
    return null; 
} 

var dateInput = "2018-01-01T20:09:00"; 

var formatFound = getFormat(dateInput); //returns "YYYY-MM-DDTHH:MM:SS" 
if(formatFound !==null){ 
    //do stuff 
} 

檢查the moment js docs上默認支持的DateFormats更多的信息和填充您的DateFormats與他們反對。

+0

'moment('01 -01-2001','YYYY-MM-DD' ).isValid()'將返回true。時刻會盡力解析日期,並可能產生不可預知的結果。 – user2468170