【问题标题】:PHP manipulate time without datesPHP 操作没有日期的时间
【发布时间】:2013-04-02 21:30:31
【问题描述】:

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

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

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

【问题讨论】:

标签: php timestamp


【解决方案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

【讨论】:

  • 在 MSSQL 中工作。不是我的选择之一。
  • 我看到了,并且文章确认它可用于 SQL Server 2008,但它不允许我选择它作为企业管理器中的列类型...
  • 好吧,我猜企业管理器是2008,但数据库是2005。Bleah。
  • 我明白了。您可以编写几个函数将 hh:mm 转换为整数然后再返回。喜欢这里stackoverflow.com/questions/6047693/convert-time-to-seconds
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2012-05-14
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2017-02-12
    相关资源
    最近更新 更多