0

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

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

有没有一种在数据库中存储时间的好方法,可以很容易地在 SQL 和 PHP 中比较它们?谢谢。

4

2 回答 2

1

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

Microsoft SQL Server(2008/2012) 也为您提供时间数据类型。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
于 2013-04-02T21:38:25.943 回答
0

好吧,我在这里看到两种方法:

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

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

于 2013-04-02T21:44:01.583 回答