将两个持续时间加在一起的聪明方法是啥? (JS/PHP/SQL)

Posted

技术标签:

【中文标题】将两个持续时间加在一起的聪明方法是啥? (JS/PHP/SQL)【英文标题】:What's the smart way to add two durations together? (JS/PHP/SQL)将两个持续时间加在一起的聪明方法是什么? (JS/PHP/SQL) 【发布时间】:2014-03-11 18:39:18 【问题描述】:

我说的是两个持续时间(例如,“2 小时 4 分钟”+“7 小时 2 分钟”); 不是两个时间戳。我用谷歌搜索了一段时间,我能找到的都是关于计算日期之间的差异。

我正在使用 SQL、phpjavascript;我的数据库有一个事件列表及其持续时间,我希望能够从SELECT 语句中总结总持续时间。显而易见的解决方案是对时间进行子串化,比如

total secs = first two chars*60*60 + second two chars*60 + last two chars 

然后将总秒数乘以 60*60 以得到十进制小时的持续时间,将其向下舍入并将余数保留为 HH:mm... 但这似乎很混乱。我应该使用更清洁、更合适的解决方案吗?

【问题讨论】:

"但这看起来很乱" --- 它没有。 “为了澄清,信息存储在 mysql 的‘时间’字段中,格式为 HH:MM:SS。” --- 那你为什么不使用 mysql 呢? dev.mysql.com/doc/refman/5.5/en/… 添加 2hours 31minutes + 3hours 6 seconds 很麻烦。在mysql中添加两个时间字段就像field1 + field2一样简单 正如其他人所说,理想情况下将该值存储在时间字段中。使用 php,您可以读取记录并使用 /(\d1,2)/ 从字段中删除数字。您需要处理返回项目的数量例如:3天2小时31分钟+3小时6秒将返回5个值,2小时31分钟+3小时6秒返回4个值。 【参考方案1】:

您应该将字段“时间”更改为“整数”

【讨论】:

【参考方案2】:

可以通过转换为通用单位(在本例中为分钟)来添加时间,添加分钟,然后转换回小时和分钟。

如果您有类似“2 小时 4 分钟”的字符串,您可以使用以下内容将其转换为分钟:

function stringToMinutes (s)   
  var a = s.match(/\d+/g);
  return a[0]*60 + +a[1];

转换回小时和分钟,例如:

function minutesToString(m) 
  function addS(n) return n!= 1? 's' : '';
  var hr = m / 60 |0;
  var min = m % 60;
  return hr + ' hour' + addS(hr) + ', ' + min + ' minute' + addS(min);

【讨论】:

以上是关于将两个持续时间加在一起的聪明方法是啥? (JS/PHP/SQL)的主要内容,如果未能解决你的问题,请参考以下文章

不能将两个相同大小的矩阵加在一起

两个音频文件的频谱图(加在一起)

Python,MYSQL 如何将两个单独列表中的两列加在一起(数字总和)到一个新列表中? [关闭]

synchronized 加在java方法前面是啥作用

C语言中如何将两个字符串加在一起

C - 如果长度不同,则将 2 个字符串中的数字加在一起