繁体   English   中英

两次之间的差异

[英]difference between two times in PHP

大家好
我试图建立一个简单的表单,用户可以使用它来输入他的请假请求。
表单包含时间输入字段和时间输入字段,并且这两个字段将包含以下语法值:从时间:15:59 pm至时间:16:59 pm

我有两个问题:
1.我应该使用什么数据类型来存储pm和我在mysql数据库中的记录,而不仅仅是时间?(我尝试使用Time,DateTime Date)但这些数据类型只存储没有pm的时间,am
2.计算这两次之间差异的最佳方法是什么?
谢谢

如果您要比较日期/时间,我发现使用时间戳最容易。 PHP中有大量的日期函数,只是以您想要查看日期函数的格式输出日期

在数据库中存储时间的最佳方法是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM