2014-02-18 2 views
0

Я пытаюсь преобразовать военное время из строки с регулярным выражением ... то, что я до сих порRegExp преобразование военного времени JavaScript

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, если не оставить его в покое. Затем замените эти числа на соответствующее число.

Проблема в том, что, если для c нет второго номера, то есть это только в 12:01 или 9:59 в стандартное время. Я вижу много недостатков, которые могут придумать это, есть ли у кого-нибудь лучшие решения, чем то, что я сделал?

+1

Используйте modulo, '18% 12 === 6' – elclanrs

+0

Можете ли вы объяснить, что с Vanilla JS? и что такое '%' в терминах здесь. – EasyBB

+1

См. Здесь http://en.wikipedia.org/wiki/Modular_arithmetic – elclanrs

ответ

3

Однострочник:

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

Если вы хотите добавить am или pm:

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

Это выглядит красиво и просто, хотя проблема возникает снова с подстрокой, так как она не всегда будет содержать 8 символов;) – EasyBB

+0

См. Edit - второй код делает все сразу и позволяет одноразрядный случай (хотя обычно военное время имеет ноль в любом случае) –

+0

Почему downvote? –

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 

Кстати , даты нужны день/месяц/год, но поскольку каждый день имеет такое же количество часов, вы можете ввести любой дату, которую вы хотите. Это часы, минуты и секунды.

+0

Это для чата, который уже реализован на наших сайтах. У нас нет доступа к php, поэтому я делаю эти маленькие JS-хаки. Я не думаю, что это было бы очень полезно в долгосрочной перспективе. – EasyBB

+0

Это javascript ... У Javascript есть тип даты. – Bart

+0

HAHA Я знаю это, я говорю, что реализация этого не очень правдоподобна, если она не уходит с моего времени или времени PHP. – EasyBB

Смежные вопросы