PHP中的两次差异

时间:2011-01-05 14:27:47

标签: php mysql

大家好 我试图建立一个用户用它来输入请假申请的简单表格 表单包含从时间输入字段到时间输入字段,这两个字段将包含此语法中的值: 从时间:下午15:59 时间:下午16:59

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

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

在数据库中存储时间的最佳方法是24小时制,并使用PHP的date函数格式化您拉动它以使用AM或PM显示它的时间。

要比较两次,我建议查看strtotime函数。这将以UNIX方式返回时间(秒)。然后,您可以比较哪个时间大于或小于彼此,或甚至对它们执行基本的数学运算(例如确定每个时间之间的秒数,然后除以60以确定分钟等)。

答案 2 :(得分:0)

问题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');

答案 3 :(得分:0)

只需将其存储为时间戳,您可以在输出时自动添加pm / am:

print date('G:i a',1294239540); // prints 15:59 pm

并以秒为单位获得差异只需使用strtotime和substract:

print (strtotime('16:59') - strtotime('15:59')); //prints 3600 (1 hour in seconds)

答案 4 :(得分:0)

当您使用24格式时存储上午和下午是多余的。任何 11:59和00:00之间的任何内容都会自动显示为pm。 DateTime / timestamp应该足以完成你想要完成的任务。然后你可以使用strftime将它转换回12小时am / pm。

答案 5 :(得分:0)

1)这没有任何意义 - 数据库存储精确时刻的表示,而不是模糊的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)