使用javascript保存为字符串的两次之间的差异

时间:2012-08-29 02:43:17

标签: javascript jquery asp.net timepicker

我有两个时间选择器jquery控件,其格式为“上午10点”,“上午11点”,“下午12点”等。如何获得这两个时间选择之间的区别。

例如,如果我在第一个控件中选择10 AM,在第二个控件中选择1 PM,我需要以小时为单位的差异为3.我如何在javascript中执行此操作。

var FirstTime = container.find('#1time').val();
var SecondTime = container.find('#2time').val();

alert(FirstTime); // 11 AM
alert(SecondTime);// 1 PM

var diff = (SecondTime - FirstTime); // Need value of 3 here..

我可以将时间选择器控件设置为军事时间格式并解析它以获取数字并获得差异。但那不是一个选择。我知道这些数字会被保存为附加AM和PM的字符串..有没有一种好方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以这样做:

var time1;
var time2;
if (FirstTime.split(' ')[1] === "PM") {
    time1 = parseInt(FirstTime.split(' ')[0])+ 12;
}else{
    time1 = parseInt(FirstTime.split(' ')[0])
}

if (SecondTime.split(' ')[1] === "PM") {
    time2 = parseInt(SecondTime.split(' ')[0])+ 12
}else{
    time2 = parseInt(SecondTime.split(' ')[0])
}

diff = time2 - time1;

答案 1 :(得分:2)

function timeDiff( first, second ) {
    var f = first.split(' '), s = second.split(' ');

    if( first == '12 AM' ) f[0] = '0';
    if( first == '12 PM' ) f[1] = 'AM';
    if( second == '12 AM' ) s[0] = '24';
    if( second == '12 PM' ) s[1] = 'AM';

    f[0] = parseInt( f[0], 10 ) + (f[1] == 'PM' ? 12 : 0);
    s[0] = parseInt( s[0], 10 ) + (s[1] == 'PM' ? 12 : 0);

    return s[0] - f[0];
}

var FirstTime = container.find('#1time').val();
var SecondTime = container.find('#2time').val();

alert(FirstTime); // 11 AM
alert(SecondTime);// 1 PM

var diff = timeDiff( FirstTime, SecondTime );

Demo

答案 2 :(得分:2)

由于12h时钟表示法不区分特定日期开始时的午夜和结束时的午夜,因此下面的函数假定12 AM表示当天的开始如果它在第一个变量中使用,在一天结束时如果在第二个变量中使用它。这意味着'12 AM' - '12 AM' = 24

function timeDiff( first, second ) {
  function to24h(value) {
    value = value.split(' ');
    return (value[0] % 12) + (value[1]==='PM' ? 12:0);
  }
  return (to24h(second)||24) - to24h(first);
}