使用JavaScript计算保存为字符串的两个时间之间的差异

3

我有两个时间选择器的jQuery控件,时间格式为“10 AM”,“11 AM”,“12 PM”等。如何获取这两个时间选择之间的差异。

例如,如果我在第一个控件中选择了上午10点,在第二个控件中选择了下午1点,我需要得到它们之间的小时差,即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..

我可以将时间选择控件设置为军事时间格式并解析它以获取数字并计算时间差。但这不是一个选项。我理解数字被保存为带有上午和下午附加的字符串..是否有一个好的方法来处理这个问题?

3个回答

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;

这里有点问题.. 虽然谢谢你的回复.. 我喜欢这个总体想法和如何实现它.. 经过小小的调整,这将很好地工作。 - ZVenue
1
你的代码没有正确处理“12 AM”和“12 PM”:'1 AM'-'12 AM'=-11'12 PM'-'1 PM'=-11'11 PM'-'12 AM'=-11。而且有很多重复的代码。顺便说一下,如果在旧版JavaScript引擎上运行(并且数字以零开头),在parseInt中没有基数,该数字可能会被解释为八进制数字。 - some

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


不起作用。您必须在 f[1] == 'PM' ? 12 : 0; 周围使用括号。 - some
如果根据维基百科(http://en.wikipedia.org/wiki/12-hour_clock#Confusion_at_noon_and_midnight),“12 AM”表示午夜,而使用“12 AM”和“1 AM”,结果为-11,而不是预期的1。 - some
'11PM'和'12 AM'的结果为-11,期望值为1或-23(取决于它是一天的开始还是结束)。 - some
啊,看到你现在修好了。 - some
我可以控制时间选择器中的范围,幸运的是现在没有午夜时间..但将来可能会有,这将非常有用。谢谢。 - ZVenue
显示剩余3条评论

2

由于12小时制的时间表示法无法区分特定一天开始时的午夜和结束时的午夜,因此以下函数假设如果第一个变量使用 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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接