-1

我希望有人可以在这里帮助我,我对 JS 不太了解,所以手头的任务已经不成比例了。

我有一个包含 3 个字段的 html 表单,其中 2 个应该是时间(例如 11:00、17:00、23:45 等),一个是简单的数字。

我一直在想办法

  1. 获取两次(11:00 - 13:00)之间的差异
  2. 将其转换为小数(这么多小时,例如:2、2.5、2.25 等)
  3. 并乘以第三个变量 (17*2.5)

任何贡献,建议,链接将不胜感激。

宗戈尔

4

2 回答 2

1

要计算你的时间,你需要创建新的 Date 对象,然后用你的减法调用 setTime() 。

var dt = new Date('8/24/2009 11:00:00');
var newHour = dt.getHours() + 2;
dt.setTime(newHour, 0, 0, 0);

或者

var dt1 = new Date('8/24/2009 11:00:00');
var dt2 = new Date('8/24/2009 13:00:00');

var h1 = dt1.getHours();
var h2 = dt2.getHours();

var h = dt2.getHours() - dt1.getHours();

要将分钟转换为十进制,只需除以 60。

var dt1 = new Date('8/24/2009 11:20:00');
var h = dt1.getHours();
var m = dt1.getMinutes();

h + (m/60) = 8.33

因此,基本上,从真正的 Date 对象开始,然后使用 getHours() 和 getMinutes() 等内置方法进行数学/转换。一旦你有了真正的 Date 对象,应该是小菜一碟。

于 2012-07-06T11:50:15.470 回答
1

如果时间采用指定的格式,您可以使用以下方法获得以分钟为单位的差异:

function diffMins(t0, t1) {
  t0 = t0.split(':');
  t1 = t1.split(':');
  return t1[0]*60 + +t1[1] - t0[0]*60 - +t0[1]
}

可以使用以下方法将其转换为十进制小时:

function minsToHours(mins) {
  return (mins/60).toFixed(2);
}

alert(minsToHours(diffMins('17:00', '23:45')));  // 6.75

如果要获取 Date 对象的小数小时差,则:

function dateDiffInHours(d0, d1) {
  return ((d1 - d0) / 3.6e6).toFixed(2)
} 

alert( dateDiffInHours( new Date(2012,07,02,17), new Date(2012,07,02,23,45))); // 6.75 

请注意,将字符串传递给 Date 对象不是一个好主意。虽然大多数浏览器会解析一种或两种格式,但有些不会。ESCMA-262 ed 3 中没有指定标准格式,日期字符串的解析完全取决于实现。ES5 指定了对 ISO8601 扩展格式的修改(例如 2012-07-02T23:45:00Z),但是使用中的大部分浏览器不支持它。

所以总是自己解析字符串,或者根据 ECMAScript 规范使用参数调用构造函数。

于 2012-07-06T12:23:52.580 回答