PHP操纵没有日期的时间

时间:2013-04-02 21:30:32

标签: php timestamp

我正在制作日历应用程序,其中时间很重要,但日期和年份不重要。员工可以输入他们可用的小时数(例如,上午8:00 - 上午9:30),然后根据其他值检查。

我正在使用strtotime()将时间放入数据库,如果没有提供,则没有意识到函数会插入日期和年份。当我开始将员工的可用性与某个时间段进行比较时,我得不到匹配,因为所有员工的时间戳都表示他们在昨天很忙。 :P

有没有一种很好的方法可以在数据库中存储一些时间,以便在SQL和PHP中轻松比较它们?感谢。

2 个答案:

答案 0 :(得分:1)

您正在寻找mySQL time数据类型。 http://dev.mysql.com/doc/refman/5.6/en/time.html

Microsoft SQL Server(2008/2012)也为您提供了time数据类型。 http://msdn.microsoft.com/en-us/library/bb677243.aspx

两者都能让你将时间存储在&HH:MM:SS'格式。它们具有可比性。 (对于MS SQL,您的范围为00:00:00.0000000到23:59:59.9999999)

如果你不能使用内置的数据类型,你可以编写一些函数来从hh:mm转换为int并再返回。

function HourMinuteSecToDecimal($hour_minute_sec) {
        $t = explode(':', $hour_minute_sec);
        return $t[0] * 60 + $t[1] * 60 + $t[2];
}

echo HourMinuteSecToDecimal("23:30:25");
return 3205

function DecimaltoHourMinuteSec($sec, $padHours = false) {
    $hms = "";
    $hours = intval(intval($sec) / 3600);
    $hms .= ($padHours) ? str_pad($hours, 2, "0", STR_PAD_LEFT) . ':' : $hours . ':';
    $minutes = intval(($sec / 60) % 60);
    $hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT) . ':';
    $seconds = intval($sec % 60);
    $hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
    echo $hms;
}

echo DecimaltoHourMinuteSec(3205);
return 23:30:25

答案 1 :(得分:0)

嗯,我在这里看到两种方式:

1:将时间戳保存为时间戳,然后修改查询,以便从时间戳中选择时间。

2:使用字符串字段并以hhmm格式保存您的时间(例如0112是凌晨1点12分或1547点是下午3点47分钟),然后使用您的选择。我知道,似乎并不是很好,但是又一次:如果您使用mysql数据库并使用time作为数据类型 - 它也将是一个格式化的字符串。