RegExp转换军事时间JavaScript

时间:2014-02-18 23:55:09

标签: javascript regex replace match

我正在尝试用正则表达式从字符串中转换军事时间......到目前为止我已经

var a = "[18:37:56]";
var b = a.replace(/(\[|\])/g,'');
var c = b.match(/^[0-9][0-9]/);
var d = Number(c[0]) > 12 ? Number(c[0]) - 12 : Number(c[0]);
b.replace(/^[0-9][0-9]/,d);

第一个替换是摆脱方括号。然后我们匹配前两个数字,然后在此之后我们将看到该数字是否大于12,如果是,则减去12,如果不是单独的话。然后用相应的数字替换这些数字。

问题是一个,如果for c没有第二个数字,这意味着它只在标准时间的凌晨12:01或9:59。我看到了很多可以提出这个问题的缺陷,有没有人比我做的更好?

2 个答案:

答案 0 :(得分:3)

一衬垫:

alert("[18:37:56]".substr(1,8).replace(/^\d\d?/,function(m) {return (m%12)||12;}));

如果您想追加ampm

"[18:37:56]".replace(/\[(\d\d?)(:\d\d:\d\d)\]/,function(_,h,ms) {return ((h%12)||12)+ms+(h>=12?"p":"a")+"m";});

答案 1 :(得分:0)

你应该只使用日期......

var time = "[18:37:56]";
var date = new Date("1 january 2014 " + time.substring(1, time.length - 1));

date.getHours() % 12 == 6
date.getMinutes() == 37
date.getSeconds() == 56

顺便说一下,日期确实需要日/月/年,但由于每天都有相同的小时数,因此您可以输入所需的任何日期。重要的是小时,分钟和秒。