[英]difference between two times in PHP
大家好
我试图建立一个简单的表单,用户可以使用它来输入他的请假请求。
表单包含时间输入字段和时间输入字段,并且这两个字段将包含以下语法值:从时间:15:59 pm至时间:16:59 pm
我有两个问题:
1.我应该使用什么数据类型来存储pm和我在mysql数据库中的记录,而不仅仅是时间?(我尝试使用Time,DateTime Date)但这些数据类型只存储没有pm的时间,am
2.计算这两次之间差异的最佳方法是什么?
谢谢
在数据库中存储时间的最佳方法是24小时制,并在使用AM或PM拉动它以显示时间时使用PHP的date
函数来格式化时间。
为了进行两次比较,我建议查看strtotime
函数。 这将以UNIX方式返回时间(秒)。 然后,您可以比较哪个时间大于或小于彼此,或甚至对它们执行基本的数学运算(例如确定每个时间之间的秒数,然后除以60以确定分钟等)。
问题1
存储为time
,使用ISO 8601(hh:mm:ss)
问题2
使用timediff,就像
select timediff(cast('13:59:29' as time), cast('10:20:00' as time));
>> 03:39:29
显示AM / PM
select time_format(cast('13:59:29' as time), '%r');
只需将其存储为时间戳,您可以在输出时自动添加pm / am:
print date('G:i a',1294239540); // prints 15:59 pm
要获得以秒为单位的差异,只需使用strtotime并减去:
print (strtotime('16:59') - strtotime('15:59')); //prints 3600 (1 hour in seconds)
当您使用24格式时存储上午和下午是多余的。 11:59到00:00 之间的任何事情都是自动下午。 DateTime / timestamp应该足以完成你想要完成的任务。 然后你可以使用strftime将它转换回12小时的am / pm。
1)这没有任何意义-数据库存储的是准确时间的表示,而不是没有am / pm的模棱两可的12小时格式。 无论数据库如何存储,都可以计算am或pm:
<?php
$am_pm = date('a', $timestamp);
?>
甚至更好,在mysql中使用您的时间字段:
SELECT DATE_FORMAT(date_field, '%p')
2)为此,您可以使用php的date_diff ,也可以在mysql中使用:
SELECT DATEDIFF(date_one, date_two)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.