所以我在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执行此操作?
请不要使用任何反正则表达式的评论
答案 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();
更干净,谢谢