2009-02-03 2 views
4

Я играл с jquery, и я запустил себя в проблему времени. У меня есть 3 временных поля выбора ввода, один на несколько часов, один на несколько минут и один на Меридиан. Мне нужно преобразовать это время в 24-часовой строковый формат, а затем вставить его в скрытый ввод.Что такое простой способ конвертировать между am/pm временем и 24-часовым временем в javascript

var time = ""; 
time += $("#EventCloseTimeHour option:selected").text(); 
time += ":" + $("#EventCloseTimeMin option:selected").text() + ":00"; 
time += " " + $("#EventCloseTimeMeridian option:selected").text(); 

$("#ConditionValue").val(time);   

Это дает мне «13:30:00», где мне нужно «13:30:00». Любые быстрые подсказки времени javascript?

+0

Я добавить недавно я узнал о datejs, и это удивительно - вы должны думать, если вы хотите, чтобы включить всю библиотеку даты для одной задачи (как выше), но я делаю много математики, поэтому это более полезно. http://www.datejs.com/ – reconbot

ответ

8

Пример tj111 предложение:

$("#ConditionValue").val(
    (
     new Date(
      "01/01/2000 " + 
      $("#EventCloseTimeHour option:selected").text() + 
      $("#EventCloseTimeMin option:selected").text() + ":00" + 
      " " + 
      $("#EventCloseTimeMeridian option:selected").text() 
     ) 
    ).toTimeString().slice(0,8)) 
; 

Или вы можете использовать:

hour = hour %12 + (meridian === "AM"? 0 : 12); 
hour = hour < 10 ? "0" + hour : hour; 
+0

Мне нравится ваше лучшее до сих пор, но я получаю недопустимую дату из «toTimeString», а затем он разрезает его, чтобы просто сказать «Недействительно».Это firefox с firebug, но он также не работает в Chrome. Я не думаю, что объект date принимает меридианы – reconbot

+0

Проверьте, не получили ли вы правильные значения из jquerys ... Если вход недействителен, вы получаете недопустимый вывод. – some

+0

@ some-please не рекомендуется разбираться со встроенным парсером, он зависит от реализации и очень подвержен ошибкам, за [* Почему Date.parse дает неверные результаты? *] (Https://stackoverflow.com/questions/ 2587345/why-do-date-parse-give-correct-results) Кроме того, [* toTimeString *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype. totimestring) зависит от реализации и не может вернуть требуемое значение. – RobG

1

Вы должны изучить методы JavaScript Date Object.

+0

Есть ли способ ввода Меридиан (am/pm)? – reconbot

+0

Если вы используете метод Date.parse, он принимает AM/PM в строке (но ему требуется полная дата перед ним). – tj111

+0

, похоже, не работает с синтаксисом даты - я сохраняю недопустимый формат даты. – reconbot

1
var time = ""; 
var hour = Number($("#EventCloseTimeHour option:selected").text())%12 + ($("#EventCloseTimeMeridian option:selected").text() == 'PM'?12:0)) ; 


time +=("00"+String(hour)).slice(-2)+":"+ $("#EventCloseTimeMin option:selected").text(); 

Ключ к этому раствору с использованием условного оператора «а б: C», который переводит к «если затем б еще с»

+0

Это перерывы с 12:30 вечера – reconbot

+0

Все еще ломается с 12: xx AM. Вы всегда должны изменить время на 12, а затем добавить 12, если его PM. – some

0

Я получил его с ответами нескольких людей.

var time = ""; 
var hour = Number($("#EventCloseTimeHour option:selected").text()); 
if($("#EventCloseTimeMeridian option:selected").text() == 'PM'){ 
    hour = String((hour%12) + 12); 
} 
hour = hour < 10 ? "0" + hour : hour; 
time +=hour+":"+ $("#EventCloseTimeMin option:selected").text() + ":00"; 
+0

Часы ниже 10 должны быть нулевыми. В режиме 24h всегда есть две цифры. – some

0

Чтобы добавить простой ответ JS, следующее будет отформатировать время, основанное на длине начальной строки. Если h: mm возвращает HH: mm, если h: mm: ss возвращает HH: mm: ss.

Если требуется HH: mm: ss, просто добавить значения по умолчанию в секундах «: 00», если нет в исходной строке.

// Change time in h:mm:ss ap to HH:mm:ss time 
 
// If time missing seconds, returns HH:mm 
 
function timeToHHmm(time) { 
 
    var nums = time.match(/\d+/g); 
 
    var am = /am/i.test(time); 
 
    nums[0] = ('0' + ((nums[0]%12) + (am? 0 : 12))).slice(-2); 
 
    // If HH:mm:ss required, use following line instead of last 
 
    // return nums.join(':') + (nums.length == 2? ':00' : ''); 
 
    return nums.join(':'); 
 
} 
 

 
// Some tests 
 
['2:45am',  // hh:mm only 
 
'5:15:45pm', // hh:mm:ss 
 
'5:15:45 pm', // space before am/pm 
 
'05:15:45 pm',// leading zero on hour 
 
'12:02am', 
 
'12:02 pm', 
 
'12:02:00am' 
 
].forEach(function(time) { 
 
    console.log(time + ' => ' + timeToHHmm(time)); 
 
});

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