【问题标题】:How to calculate hours greater than 24h using datejs如何使用 datejs 计算大于 24 小时的小时数
【发布时间】:2012-11-27 14:56:26
【问题描述】:

在表中,我有字段类型 TIME,我在其中存储时间间隔,例如92:30:00,我想用javascript(datejs)做的是添加或删除例如02:15:00 往返 92:30:00。

我可以在工作时间不超过 23:59 时进行,但是当值超过 23:59 时如何进行?

grab a from db //as 92:30
var b = Date.parse(a);
var c = Date.parse("02:15");

    d= new TimeSpan(b-c);
    e= (b).addHours(c);

console.log(d.toString("HH:mm")
console.log(e.toString("HH:mm")

我很伤心,如果你停留在 24 小时的时间范围内,是否可以在更长的时间间隔内做同样的事情?

更新: (总和)

t = Date.today();
cc = Date.parse(c);
dd = Date.parse(d);

ccc = (cc - t)
ddd = (dd - t);

res = new TimeSpan(ccc+ddd);
console.log(res.toString()); //3.22:45:00

【问题讨论】:

  • 根据上面提供的数字,您想要的最终价值是多少?记住日期和时间总是相对于一个时间点。 '92:30:00' 相对于什么?是从“现在”还是 00:00:00(午夜)开始的 92 小时 30 分钟?或基于另一个时间点。 Date.parse 将假设“午夜”是您的起点。
  • 这只是时间间隔,例如“您本周如何在菜单上花费多少时间来帮助人们”,一种时间跟踪
  • 您能否修复您的代码示例,以便它们演示整个场景,而不是从一个片段和另一个片段中提取。试图弄清楚最终结果应该是什么是非常混乱的。所以现在你想要一个代表天-小时-分钟-秒的字符串值?
  • 首先,谢谢你的帮助......总和没问题,我让它工作,我会将此字符串转换为小时(d,h,m> h,m),这就是我需要

标签: javascript time datejs


【解决方案1】:

我认为 Datejs 不会正确解析 >24 小时的时间值。我能想到的最简单的解决方法是将字符串拆分为多个部分并添加到Date.today()

这是一个演示整个场景的示例。

示例

var a = '92:30'.split(':');
var b = '02:15'.split(':');

var c = Date.today().addHours(+a[0]).addMinutes(+a[1]);
var d = Date.today().addHours(+b[0]).addMinutes(+b[1]);

var e = new TimeSpan(c - d);

console.log('days', e.days);  // 3
console.log('hours', e.hours);  // 18
console.log('minutes', e.minutes);  // 15

我不是 100% 你想要的最终结果,但是一旦你有了e TimeSpan,你就有了减去两个原始值的乘积。

希望这会有所帮助。

编辑:如果您只想对值进行简单的数学运算以计算小时值,则应该可以使用以下方法。

示例

var a = '92:30'.split(':');
var b = '02:15'.split(':');

var c = Date.today().addHours(+a[0]).addMinutes(+a[1]);
var d = Date.today().addHours(+b[0]).addMinutes(+b[1]);

var diff = (c - d) / (1000 * 60 * 60);

console.log(diff); // 90.25

你不应该要求 Datejs 这样做。只需使用本机 JavaScript Date API 即可,您可以从上述示例中删除任何 Datejs API。

【讨论】:

  • hmm,实际上第二个解决方案不是我需要的,而不是 90.25 应该是 90:15...我已经用 sum 解决方案更新了第一个帖子,你能看看,可以吗像那样?
  • 90.25 是正确的。如果您希望将一小时的 0.25 表示为一小时的分钟数 (15),那么您应该能够轻松转换。
【解决方案2】:

不错的尝试,但您忘记了 ZERO 日期实际上是 1970 年 1 月 1 日(我认为)。因此,您需要牢记这一点来进行日期算术运算。

【讨论】:

  • 这不应该是 datejs 的问题,timejs 会关心这个问题,问题是如何解析 92:30 ;)
猜你喜欢
  • 2011-05-31
  • 2018-07-23
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多