Javascript简单的数学与几个变量

时间:2012-07-06 11:37:18

标签: javascript math variables

我希望有人能在这里帮助我,我对JS没有太多线索所以手头的任务已经不成比例。

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

我一直试图找到一种方法

  1. 获得两次(11:00 - 13:00)之间的差异
  2. 将其转换为小数(如此多小时,如:2,2.5,2.25等)
  3. 并将其乘以第3个变量(17 * 2.5)
  4. 任何贡献,建议,链接都将非常感激。

    琼戈尔

2 个答案:

答案 0 :(得分:1)

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

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

OR

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对象,应该是小菜一碟。

答案 1 :(得分: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规范使用参数调用构造函数。