【问题标题】:MySQL time value in query 838:59:59?查询 838:59:59 中的 MySQL 时间值?
【发布时间】:2016-11-10 07:03:31
【问题描述】:

我想问。

我正在尝试将 TIME 值添加到 mysql 数据库中。但是数据库中添加的值是 838:59:59

并且它仅以 838:59:59 的形式存储在 timein 列中。超时列结果为 00:00:00 值。

代码如下

<?php
    $connect      = mysqli_connect("localhost", "root", "root", "database");
    global $connect;   

    if(isset($_POST['Submit']))
    {   
        $timeout            = strtotime('08:30:00');
        $timein             = strtotime('12:30:00');

        $time_out_user      = strtotime($_POST['timeout']);
        $time_in_user       = strtotime($_POST['timein']);

        if(($time_out_user >= $timeout) && ($time_out_user <= $timein))
        {
            echo "Duplicate time";
        }
        else
        {
            $add         = "INSERT INTO table (timeout,timein)
                                       VALUES ('$time_out_user','$time_in_user')";
            $addDateTime = mysqli_query($connect,$add);
            echo "Time added";
        }
    }
?>
<form action="test.php" method="post">  
    <table> 
        <tr>
            <td><i class="fa fa-unlock-alt"></i> </td>
            <td>Time Out: </td>
            <td><input type ="time" name="timeout" size="30"></td>
        </tr>
        <tr>
            <td><i class="fa fa-unlock-alt"></i> </td>
            <td>Time In: </td>
            <td><input type ="time" name="timein" size="30"></td>
        </tr>
    </table>    

    <p><input class="btnSuccess" type ="submit" name="Submit" value="Submit"> </p>              
</form>

谢谢。

【问题讨论】:

  • 列类型有哪些
  • 两者的列时间都是 TIME 。

标签: php mysql


【解决方案1】:

答案很简单,它是字段可以容纳的最大值。

MySQL 以 'HH:MM:SS' 格式(或 'HHH:MM:SS' 格式用于大小时值)。 TIME 值的范围可以从 “-838:59:59”到“838:59:59”。小时部分可能很大,因为 TIME 类型不仅可以用来表示一天中的时间(其中 必须小于 24 小时),还包括经过的时间或时间间隔 在两个事件之间(可能远大于 24 小时,甚至 负)。

您可能最好只使用一个 int 字段(其中值存储为与开始时间的秒差)。有一个存储自纪元以来经过的秒数的字段而不是日期时间字段是一种常见的做法。否则,您需要切换到 datetime 字段。

http://dev.mysql.com/doc/refman/5.7/en/time.html

【讨论】:

  • 我已将其更改为 datetime 类型,但列超时和 timein 的值存储均为 0000-00-00 00:00:00
  • 请用您的新表格更新您的问题。同时添加生成的sql示例(例如:使用echo打印出sql)
  • 我回显结果,值为 "1" 。我更改为 INT 类型,存储的值为 1478782800 用于超时,1478794140 用于 timein .. 然后,我将其更改为 VARCHAR 类型,该值用于超时 1478794140,timein 为 1478797560
  • 请用您的新表格更新您的问题。还要添加生成的sql示例(例如:使用echo打印出sql)
【解决方案2】:

您正在使用 strtotime()

strtotime() - 将英文文本日期时间解析为 Unix 时间戳:

例如:

 echo(strtotime("3 October 2005")); 
output  as 1128312000

在这里试试

$epoch_time_out_user  =strtotime($_POST['timeout'])- (300*60);

$dt = new DateTime("@$epoch_time_out_user"); 
$time_out_user = $dt->format('H:i:s');

//now $time_out_user has time 
// now you can use **$time_out_user**  in insert query
// do same for  **$time_in_user**  

//FYI : The value (300*60) is depends timezone

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多