2013-01-31 50 views
4

我無法正確格式化2位數日期作爲4位數日期。將2位數日期轉換(格式設置)爲4位數日期

我有一個文本輸入框:

<input type="text" value="" class="date"/> 

然後,我希望用戶輸入一個日期後對其進行格式化,在「MM/DD/YYYY」格式。所以我有一個onChange事件:

$('.date').on('change',function(){ 
    var date = new Date($(this).val()); 
    $(this).val((date.getMonth()+1)+'/'+date.getDate()+'/'+date.getFullYear()); 
}); 

好了,現在來的怪異(我將使用12年12月12日作爲一個例子日期):

1)和getFullYear()返回在1912年所有IE,FF。 Chrome返回2012.

2)getYear()在IE,Chrome中返回112。 FF返回12.

因此,似乎現在唯一的選擇是嗅探用戶代理,並相應地使用它。反正有人嗅到UA嗎?

+0

你可能想看看這個帖子http://stackoverflow.com/questions/2997785/jquery-plugin-to-perform-date-manipulations - JavaScript是不是很大日期。 –

+2

如果我在Date字段中輸入類似'04/19/10'的內容,您怎麼知道我是在談論1910年還是2010年? – kinsho

+3

您的輸入應該需要全年。 –

回答

1

你可以嘗試,一是獨立的輸入

... 
var input=$(this).val(); 
var month=input.substr(0,2)-1; 
var day=input.substr(3,2); 
var year=parseInt("20"+ input.substr(6,2)); 

的部分,然後initate一個新的Date對象:

var date= new Date(year,month,day); 

或寫回場,像你一樣:

$(this).val((date.getMonth()+1)+'/'+date.getDate()+'/'+date.getFullYear()); 
+1

有趣的,但是一個失敗的測試是如果我輸入「1992」作爲一年。在你的代碼中,它會返回「2092」,這將是不正確的,所以你必須首先測試提供的年份的長度。 – jkinz

+0

有沒有爭論,有很多其他的測試,你應該檢查,就像有任何字母/空格,這個日期是有效的(34/70/09是無效的),等等... –

+0

一般,我會建議你會實現其他的東西,比如jquery-ui datepicker(或其他插件),而不是重新發明輪子。我試圖專注於你的問題。我的假設是,當你強制一年是2位數字,它必須在1999年以上。 –

0

詢問後,我結束了使用Moment.js。我試過date.js,但因爲我部分使用unix時間戳,所以時刻似乎更好地處理這些(IMO)。

0

使用moment.js

const moment = require("moment") 
const date = moment("21", "YY") 
const year = date.format("YYYY")