Javascript 使用正则表达式将零添加到一位数日期的前面

Javascript 使用正则表达式将零添加到一位数日期的前面,javascript,regex,Javascript,Regex,我试图在javascript代码中使用正则表达式对日期时间字符串进行排序,但遇到了一个问题。如果字符串“MM/DD/YYYY HH:MM:SS”的HH部分是一个数字,则我的程序会使用缺少的数字对其进行排序,因此该数字要小得多,无法正确排序 我的正则表达式如下(所讨论的部分以粗体显示): /^(\d{1,2})[/-](\d{1,2})[/-](\d{4})[\s](\d{1,2})[\:](\d{2})[\:](\d{2})[\s]([AP]M)?/g 如果数字是一位数,有没有办法在HH的前面加

我试图在javascript代码中使用正则表达式对日期时间字符串进行排序,但遇到了一个问题。如果字符串“MM/DD/YYYY HH:MM:SS”的HH部分是一个数字,则我的程序会使用缺少的数字对其进行排序,因此该数字要小得多,无法正确排序

我的正则表达式如下(所讨论的部分以粗体显示):

/^(\d{1,2})[/-](\d{1,2})[/-](\d{4})[\s](\d{1,2})[\:](\d{2})[\:](\d{2})[\s]([AP]M)?/g

如果数字是一位数,有没有办法在HH的前面加一个零?并且不使用任何.replace()方法,因为这在我的排序函数部分不起作用


提前谢谢

如果不使用
replace
,则无法修改字符串。您可以“规范化”与正则表达式匹配的日期:

var out = old
.replace(/^(\d\d?)[\/ -](\d\d?)[\/ -](\d{4})\s(\d\d?):(\d\d):(\d\d)(?:\s([AP]M))?/g
,function(x,m,d,y,h,i,s,a) {
    if( m.length == 1) m = "0"+m;
    if( d.length == 1) d = "0"+d;
    if( a == "PM") h = ""+((h%12)+12);
    if( a == "AM" && h == 12) h = "0";
    if( h.length == 1) h = "0"+h;
    return y+m+d+h+i+s;
});
对于今天的日期,这将返回:

20121130141320
日期组件是从最大到最小排序的,这意味着一个简单的
.sort()
调用将以正确的顺序排列日期,而不会引起任何麻烦


注意:我编辑了你的正则表达式,但它仍然匹配相同的内容。唯一的区别是,现在如果没有AM或PM,则不再需要末尾的空格。

您可以调用自定义排序函数将字符串转换为日期对象以进行比较吗


类似于:

我在这个问题上有点晚了,但就个人而言,我不想在这个问题上使用正则表达式。我确实希望尽可能使事情更简单,因此使用三元运算符:

// now (I'm posting at 03/05, so let's take this value)
var datev = new Date(); 

/* 
* here we will simply concatenate the value with a prefix "0" if the number
* is lower than 10. If not, concatenate the original value.
*/
var string_date = (datev.getMonth()+1 < 10 ? "0"+datev.getMonth()+1 : datev.getMonth()+1) + "/" + (datev.getDate() < 10 ? "0"+datev.getDate() : datev.getDate()); 

// display 03/05 instead of 3/5
console.log(string_date); 
//现在(我在03/05发布,所以我们取这个值)
var datev=新日期();
/* 
*在这里,如果数字
*低于10。如果不是,则连接原始值。
*/
变量字符串_date=(datev.getMonth()+1<10?“0”+datev.getMonth()+1:datev.getMonth()+1)+“/”+(datev.getDate()<10?“0”+datev.getDate():datev.getDate());
//显示03/05而不是3/5
console.log(字符串\日期);
希望添加此方法以使主题更加多样化


注意:getMonth()返回一个介于0和11之间的值,因此您必须向其中添加1才能获得正确的值。

如果它在您的程序中可行,尝试将日期字符串转换为unix时间戳…当您简单地比较整数时,它们不会出现排序问题示例日期时间为:10/07/2012 9:45:37 AM。这是一个好主意,因为在我使用替换方法之前:a.replace(dateRegex,$3$1$2$4$5$6”);//dateRegex是我保存的正则表达式;我可以替换为函数。不客气:)如果您觉得此答案有用,请确保将其标记为已接受^_^