如何在 JavaScript 中将时间转换为十进制数?

新手上路,请多包涵

我懒得在每个月底之前填写我的工作时间表,所以我开始在我们的 PDF 表单中添加一些功能。 Acrobat Pro 提供了使用 JavaScript 进行高级计算的功能,但我被这个问题困住了。

我有两个字段可以输入我开始/结束工作的时间。我想计算我的加班时间并将结果输出到第三个字段。但是,我希望输出是十进制的,所以当我加班半小时时,结果将是 0.5

示例:我的工作时间是 8.5 小时,我从 7.30 开始,到 16.00(下午 4 点)结束。

到目前为止我的代码:

 var workTime = this.getField("Work time").value;
var startTime = this.getField("Start time").value;
var endTime = this.getField("End time").value;

event.value = workTime - (endTime - startTime);

原文由 idleberg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

将小时和分钟分开,将分钟除以 60 ,加上小时。

 function timeStringToFloat(time) {
  var hoursMinutes = time.split(/[.:]/);
  var hours = parseInt(hoursMinutes[0], 10);
  var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0;
  return hours + minutes / 60;
}

原文由 Amadan 发布,翻译遵循 CC BY-SA 3.0 许可协议

在我的例子中,我用它来 计算发票上的时间

输入可以包含以下 6 种为用户编写的方式:

  • 1 -> 1 小时 0 分钟
  • 1,2 -> 1 小时 12 分钟
  • 1.5 -> 1 小时 30 分钟
  • 1:30 -> 1 小时 30 分钟
  • 1h40 -> 1 小时 40 分钟
  • 45m -> 0 小时 45 分钟

所以我用了这个(感谢 Amadan),这里是工作代码:

 function time2dec(tIn) {
    if(tIn == '')
        return 0;
    if(tIn.indexOf('h') >= 0 || tIn.indexOf(':') >= 0)
        return hm2dec(tIn.split(/[h:]/));
    if(tIn.indexOf('m') >= 0)
        return hm2dec([0,tIn.replace('m','')]);
    if(tIn.indexOf(',') >= 0)
        return parseFloat(tIn.split(',').join('.')).toFixed(2);
    if(tIn.indexOf('.') >= 0)
        return parseFloat(tIn);
    return parseInt(tIn, 10);
}

function hm2dec(hoursMinutes) {
    var hours = parseInt(hoursMinutes[0], 10);
    var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0;
    return (hours + minutes / 60).toFixed(2);
}

使用示例(使用 jQuery):

 var qty = time2dec($('#qty').val());
var price = parseFloat($('#price').val());
var total = (qty * price).toFixed(2);

希望它能帮助我们中的一些人。

原文由 Meloman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题