2014-12-03 88 views
0

我试图通过表单域将实际的小时数而不是时间本身插入到MySQL数据库中。因此,例如向MySQL插入实际的小时数(不是时间)

$time1 = '00:00'; 
$time2 = '27:20'; 
$time3 = '00:45'; 

所以我可以检索不同的行,并可以在需要时随时计算。无论是通过搜索查询,还是在系统的其他区域。

当我试图做加法的三倍以上,这是不是给的结果我找了

$total = strtotime($time1) + strtotime($time2) + strtotime($time3); 
echo date('H:i:s', $total); 

结果

14:16:44 

的方式虽然它应该是这样的

28:05:00 

我在MySQL表中使用了TIME DATATYPE。我可以用作TEXT,但我也关心用户输入中发生的错误。当我没有强迫用户插入的任何特定的格式,但他们可以插入如下方式

27.20 
27:20 

1.5 
1:30 

我主要关注的是计算时间,用户输入可以放在第二位,但如果可以实施则会很好。

那么有无论如何,想法或暗示要达到这一点?

回答

0

如果您只对小时和分钟感兴趣,为什么不将该值存储为整数?只需将小时数乘以60.

您可以在PHP中处理转换。

另外,你也可以很容易地使用两个(非常小)的int字段。

+0

这也可能是个好主意。只是一个问题。如果我使用整数比我怎样处理小数值。像1:30或27:45等?或者'FLOAT'甚至'TEXT'都可以工作? – 2014-12-03 05:58:34

+0

再次阅读我的消息。如果您只对小时和分钟感兴趣,请将小时数乘以60.因此,1:30将转换为1 * 60 + 30 = 90分钟。 – Evert 2014-12-03 06:36:04

+0

哦!我明白你的意思。这可能是个好主意。非常感谢。 – 2014-12-03 06:48:38

1

date()预计自1970年1月1日00:00:00 UTC在UNIX格式的时间戳,即秒(这也是由strtotime提供的值)

你传递给它添加了一系列的结果时间量从1970年1月1日起,而不是只加起来的小时数,所以(就date而言),您会生成随机日期和时间,并只打印时间(尝试打印日期$total并查看您得到的结果)。

因为你的时间被存储在数据库中,一种可能性是让MySQL的处理时间计算本身,例如:

SELECT ADDTIME('00:00',ADDTIME('27:20','00:45')) 

将导致“28:05:00”。您可以将数据库字段设置为TIME,并通过SQL直接对它们进行操作,并将用户输入转换为PHP中可接受的TIME值。

+0

感谢您提供很好的细节。只是为了澄清这里'00:00'不是时间,但它是小时数。意味着有0个小时。那么你的想法也可以用这个价值吗? – 2014-12-03 05:57:11

+0

@CodeLover我看不出差异,但是,00:00将被解释为零小时 – outlyer 2014-12-03 05:59:37

+0

酷。让我现在尝试它,并回到你身边。谢谢 – 2014-12-03 06:00:33