使用RegEx在javascript中将格式错误的日期yyyy-M-d重写为yyyy-MM-dd

时间:2013-11-27 08:43:36

标签: javascript regex

所以我在javacript重写日期,并且熟悉的js吐出像2013-1-1这样的日期并不总是非常有用。相反,我正在寻找一个例程,将这个日期形成正确的iso版本2013-01-01

今天我通过使用字符串

来实现
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执行此操作?

请不要使用任何反正则表达式的评论

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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('-'));

答案 2 :(得分: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();

更干净,谢谢