时区预订系统

时间:2011-12-05 20:58:36

标签: php mysql

我需要使用PHP和MYSQL创建一个在线预订系统,但在创建数据库表结构时,我一直陷入困境。

这是我到目前为止的表结构:(伪)

TABLE: 'times'

time_id | int | AI
time | datetime? (is this the best approch, if so how would the PHP code look for the datetime format?)
available | boolean


TABLE: 'bookings'

booking_id | int | AI
client_id | int | foreign key
manager_id | int | foreign key
time_id | int | foreign key

在系统内,我希望能够:

  • 在管理面板中创建新日期,然后系统用户可以创建预订时段(如果可用)。

时间只能是以下选择之一:(如果我应该将下面的一个时间存储为DATETIME,或者Unix时间戳等等,那么我很困惑...)

3:05 3:10 3:15 3:20 3:25 3:30 3:35 3:40 3:45 3:50 3:55 4:00 4:05 4:10 4:15 四点20 4:25 4:30 4:35 4:40 4:45 4:50 4:55 5:00 5:05 5:10 5:15 5:20 5:25 5:30 5:35 5:40 5:45 5:50 5:55 6:00

有人可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

- Edit-- 根据您的最新编辑,您似乎希望显示预设时间的选择列表,然后将选定的时间插入数据库。如果这是正确的,那么时间戳对你没有帮助,因为时间戳是从1970年1月1日到2038年1月19日的特定时间实例。

对于您的示例,我们可以对时隙进行硬编码,请考虑以下事项:

class Time
{
    const TIMESLOT_MIN = 3;
    const TIMESLOT_MAX = 6;

    public static function getTimeslots()
    {
        $timeslots = array();

        for ($i = self::TIMESLOT_MIN ; $i <= self::TIMESLOT_MAX ; $i++) {

            for ($j = 0 ; $j < 60 ; $j +=5) {

                if ($j < 10) {
                    $j = '0'. $j;
                }

                $timeslots[] = $i . ':' . $j;
            }
        }

        return $timeslots;
    }
}

var_dump(Time::getTimeslots());

- Original-- 使用PHP中的time()或MySQL中的now()来存储UNIX时间戳将确保一致的日期/时间存储格式。这样,您的应用程序可以安全地假设对相关日期列的任何引用都是时间戳,并相应地格式化以构建有意义的视图。

另一个考虑因素是确保所有时间戳都以UTC(通用时间码)存储,这样您就不必转换进入数据库的时间戳,只是来自数据库。在操作系统级别和数据库级别对系统进行基准测试将使您的生活变得更加轻松,与时区转换相关。

您可能还想查看CURRENT_TIMESTAMP,它会允许您为每个表设置一列到当前时间戳,例如:

ON UPDATE CURRENT_TIMESTAMP

答案 1 :(得分:0)

我自己更喜欢unix时间戳:http://en.wikipedia.org/wiki/Unix_time,这样我只是存储为整数。