我希望有人能在这里帮助我,我对JS没有太多线索所以手头的任务已经不成比例。
我有一个包含3个字段的html表单,其中2个应该是时间(如11:00,17:00,23:45等),其中一个是简单的数字。
我一直试图找到一种方法
任何贡献,建议,链接都将非常感激。
琼戈尔
答案 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规范使用参数调用构造函数。