大家好 我试图建立一个用户用它来输入请假申请的简单表格 表单包含从时间输入字段到时间输入字段,这两个字段将包含此语法中的值: 从时间:下午15:59 时间:下午16:59
我有两个问题:
1.我应该使用什么数据类型来存储pm和我在mysql数据库中的记录,而不仅仅是时间?(我尝试使用Time,DateTime Date)但这些数据类型只存储没有pm的时间,am <登记/>
2.计算这两次之间差异的最佳方法是什么?
谢谢
答案 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)