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

Re-write malformed dates yyyy-M-d to yyyy-MM-dd in javascript using RegEx

本文关键字:日期 yyyy-MM-d yyyy-MM-dd 错误 格式 RegEx javascript 重写 使用      更新时间:2023-11-12

所以我在javascript中重写日期,因为熟悉的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执行此操作?

请不要给我任何反正则表达式的评论

非正则表达式解决方案将是一个通用的填充函数。首先把你的约会对象放在无填充的版本中,然后你可以在分隔符上分开,并根据需要填充。类似这样的东西:

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

这可能会有所帮助:

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('-'));

基于elclans的建议,我编写了一个扩展方法

// 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();

更清洁,感谢