2013-11-27 58 views
0

yyyy-MM-dd所以我重寫了javacript中的日期,並且像熟悉的js吐出日期,如2013-1-1,總是不是很有用。相反,我正在尋找一個程序,將形成該日期爲正確的ISO版本2013-01-01重新寫入格式錯誤的日期yyyy-M-d在JavaScript中使用RegEx

今天我做這個用字符串

var b = new Date('2013-1-1'); 
var result = b.getFullYear() + "-" + 
      (b.getMonth().toString().length == 1 ? "0" + parseInt(b.getMonth() + 1) : parseInt(b.getMonth() + 1)) + "-" + 
      (b.getDate().toString().length == 1 ? "0" + b.getDate() : b.getDate()); 

這工作,但它是醜陋的。有沒有更好的方法來使用RegEx執行此操作?

請饒了我的任何反正則表達式評論

+0

你可能會覺得這個圖書館很有用:[momentjs.com](http://momentjs.com/) – Tafari

+0

@Neel他已經表示「請不要讓我反任何反正則評論」。 – Tafari

+0

@Tafari,即使它在頂端實現我的目的有點超過,時刻看起來很棒。我會看看源代碼並看看! –

回答

0

基於elclanrs建議我寫一個擴展方法

// Add 0 to single numbers 
Number.prototype.padDate = function() { 
    // Add +1 if input is 0 (js months starts at 0) 
    var number = this == 0 ? 1 : this; 
    return number.toString().length == 1 ? "0" + number : number; 
}; 

這讓我建立日期,這樣

var b = new Date('2013-1-1'); 
var result = b.getFullYear() + "-" + b.getMonth().padDate() + "-" + b.getDate().padDate(); 

更清潔,謝謝

1

非正則表達式的解決方案是一個通用的填充功能。首先在非填充版本中獲取你的日期,然後你可以拆分分隔符並根據需要進行填充。事情是這樣的:

var date = '2013-1-1'; 

var pad = function(n) { 
    return function(str) { 
    while (str.length < n) { 
     str = '0'+ str; 
    } 
    return str; 
    } 
}; 

date = date.split(/-/g).map(pad(2)).join('-'); //=> 2013-01-01 
+0

好主意,我可能會將它作爲數字或字符串上的原型來實現它 –

1

可能,這可能幫助:

var str="2013-1-1"; 
var m = str.match(/^(\d{4})-(\d{1})-(\d{1})$/); 
console.log([m[1], "0".concat([2]-1), "0".concat(m[3])].join('-')); 
+0

這很好,我會嘗試它! –