【问题标题】:subtracting one time from another减去一个时间
【发布时间】:2014-01-18 04:44:16
【问题描述】:

我已经很好地搜索了我正在寻找的东西,但似乎无法准确找到我需要的东西。我是 jQuery 和 JavaScript 的新手。

我想要做的就是从另一个中减去一个 24 小时时钟时间,以找出使用 JQuery 或 JavaScript 分配了多少小时,即开始时间:12:00 结束时间:16:00 将是 4 小时。

从 12:00 到第二天 12:00 时,我如何才能在没有问题的情况下执行此操作?

我不是在处理日期,只是时间。

目前时间是这样存储的,作为 start_time end_time 的对象的一部分:

var shift = {'location':$('#shift_location').val(),
             'shift_date': $('#shift_date').val(),
             'start_time':$('#shift_start_time').val(),
             'end_time':$('#shift_end_time').val()
            };
var shift_list = JSON.parse(localStorage.shift);
shift_list.push(shift);
localStorage.shift = JSON.stringify(shift_list);  

【问题讨论】:

  • 使用 Momentjs momentjs.com 结帐。它具有您需要的功能。
  • 时间是如何存储的?是像'12:00' 这样的字符串、Date 对象还是别的什么?
  • 如果时间跨越多天,您将不得不使用日期而不仅仅是时间。
  • 是的,它被存储为一个字符串,感谢所有的链接和信息,非常有帮助。

标签: javascript jquery local-storage


【解决方案1】:

使用给定的信息,即 start_time 和 end_time,您无法涵盖多天。它们只是在 0 到 23 小时之间振荡。没有涉及计算多天的计数器。如果您需要,您还需要两个状态来存储 start_date 和 end_date,它们将充当@John Boker 所指出的计数器。但是,如果您确定差异永远不会超过 24 小时,那么我们可以使用来自 JAVASCRIPT: subtracting Time and getting its number of minutes function 的 parseTime 并稍作修改。

function parseTime(s) {
   var c = s.split(':');
   return parseInt(c[0]) * 60 + parseInt(c[1]);
}

var limit = parseTime("23:59");

function getDiff(start_time, end_time){
   var a = parseTime(start_time), b = parseTime(end_time);
   if(b < a) // means its the next day.
      return Math.round((limit - a + b)/60);
   else if(b > a)
      return Math.round((b - a)/60);
   else if(b - a == 0)
      return 24.0;
   else
      alert("Invalid data");
 }

 alert(getDiff("12:00", "11:00"));

【讨论】:

  • 谢谢这个解释的很好,我会用这个!
【解决方案2】:

您可以使用 momentjs 在 javascript 中处理日期。

示例(moment docfiddle):

var start_time = "12:00";
var end_time = "16:00";

var start = moment.duration(start_time, 'h');
var end = moment.duration(end_time, 'h');
alert(end.subtract(start).hours()); // 4

当然,由于任务的简单性,您总是可以使用纯 javascript:

var start_time = "12:00";
var end_time = "16:00";
alert(parseInt(end_time, 10) - parseInt(start_time, 10)); // 4

【讨论】:

  • 如果你是 JavaScript 新手,你应该使用像 momentjs 这样好的库来进行日期时间计算和日期解析。
  • 感谢这几乎是完美的,但是如果我使用带分钟的时间,它不会将它们相加,只是小时。我想这与 .hours 有关,所以我应该能够弄清楚。这个答案让我走上了正轨,干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多