PHP gmdate(“Y/m/d H:i:s”,time())返回错误的时间

PHP gmdate(“Y/m/d H:i:s”,time())返回错误的时间,php,mysql,Php,Mysql,我有一个用Kodula开发的Android应用程序,它将GPS坐标从智能手机发送到PHP脚本,PHP脚本将这些数据存储到MySQL表中。 日期是服务器日期。 有几款智能手机参与了这个小组,但其中两款手机的时间总是错的。 日期存储为gmdate(“Y/m/d H:i:s”,time()) 在MySQL表中日期显示错误的两款智能手机上,首先,正如格式所示,它应该是24小时格式,但它是12小时格式,时间比正确的时间晚1小时 例如,请检查下面的MySQL表: 顶部的记录显示了正确的GMT时间,因为在测

我有一个用Kodula开发的Android应用程序,它将GPS坐标从智能手机发送到PHP脚本,PHP脚本将这些数据存储到MySQL表中。 日期是服务器日期。 有几款智能手机参与了这个小组,但其中两款手机的时间总是错的。 日期存储为gmdate(“Y/m/d H:i:s”,time()) 在MySQL表中日期显示错误的两款智能手机上,首先,正如格式所示,它应该是24小时格式,但它是12小时格式,时间比正确的时间晚1小时

例如,请检查下面的MySQL表:

顶部的记录显示了正确的GMT时间,因为在测试期间,两个装置都在报告GPS。 底部的记录以12h格式显示时间,错误时间比正确时间少1h

我尝试了在互联网上找到的几种格式建议,包括设置日期\默认值\时区\设置('GMT');在脚本顶部,但没有更改。测试同时在表中显示的两个单位上进行,相同的国家,相同的时区,只有GPS坐标不同

问题不可能来自智能手机,因为它没有设置日期,日期是由与正常工作的服务器相同的服务器生成的

PHP代码如下:

<?php
include('iotaccess.php');
date_default_timezone_set('GMT');

$devid = $latitude = $longitude = $altitude = $speed = $direction = $opstatus = $gpsstatus = $batstatus = "0";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $api_key_value = test_input($_POST["api_key"]);
    if($api_key == $api_key_value) {
        $devid       = test_input($_POST["devid"]);
        $latitude    = test_input($_POST["latitude"]);
        $longitude   = test_input($_POST["longitude"]);
        $altitude    = test_input($_POST["altitude"]);
        $speed       = test_input($_POST["speed"]);
        $direction   = test_input($_POST["direction"]);
        $opstatus    = test_input($_POST["opstatus"]);
        $gpsstatus   = test_input($_POST["gpsstatus"]);
        $batstatus   = test_input($_POST["batstatus"]);

        //if(test_input($_POST["gpsstatus"])==1){$gpsstatus=TRUE;}
        //if(test_input($_POST["batstatus"])==1){$batstatus=TRUE;}

        // Create connection
        $conn = new mysqli($servername, $DBuser, $DBpass, $DBname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 

        //$sql = "SELECT devid FROM GroupMembership WHERE devid='". $devid ."';";
        $sql = "SELECT gm.devid,gt.command FROM GroupMembership as gm JOIN GroupTracker as gt on gm.devid=gt.devid WHERE gm.devid='". $devid ."';";
        
        $result = mysqli_query($conn, $sql);
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

        if($row['devid']=='') {
           echo "Devid not found.";
        } else {

          echo "command:".$row['command'];

          if($gpsstatus==1){
             $sql = "UPDATE GroupMembership set latitude=" .$latitude. ",longitude=" .$longitude. ",timestamp='" .gmdate("Y/m/d H:i:s", time()). "'";
             $sql = $sql. " WHERE devid='" .$devid. "';"; 
             if ($conn->query($sql) === TRUE) {
                $sql = "UPDATE GroupTracker set altitude=" .$altitude. ",speed=" .$speed;
                $sql = $sql. ",direction=" .$direction. ",timestamp='" .gmdate("Y/m/d H:i:s", time()). "'"; 
                $sql = $sql. ",opstatus='" .$opstatus. "',gpsstatus=" .$gpsstatus. ",batstatus=" .$batstatus;
                $sql = $sql. " WHERE devid='" .$devid. "';";   
                $conn->query($sql);  
             } else {
               echo "Error: " . $conn->error;
             } 
          }else{
             $sql = "UPDATE GroupMembership set timestamp='" .gmdate("Y/m/d H:i:s", time()). "'";
             $sql = $sql. " WHERE devid='" .$devid. "';";
             if ($conn->query($sql) === TRUE) {
                $sql = "UPDATE GroupTracker set timestamp='" .gmdate("Y/m/d H:i:s", time()). "'"; 
                $sql = $sql. ",opstatus='" .$opstatus. "',gpsstatus=" .$gpsstatus. ",batstatus=" .$batstatus;
                $sql = $sql. " WHERE devid='" .$devid. "';";   
                $conn->query($sql);  
             } else {
               echo "Error: " . $conn->error;
             }              
          } 
       }
       $conn->close();

    } else {
      echo "Wrong API Key";
    }

} else {
  echo "No data posted with HTTP POST.";
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

不确定这是如何工作的

日期应该以
yyyy-mm-dd
的格式传递给MySQL,因此当您传递带有斜杠格式的日期时,MySQL应该拒绝查询并给出一个错误

将计算日期更改为使用

timestamp='" .gmdate("Y-m-d H:i:s", time()). "'";
或者简单地使用
NOW()
,让MySQL为您完成所有工作

timestamp=NOW()";

我认为您必须向我们展示创建日期时间并将其保存到数据库的PHP代码。为了消除错误的可能性,您可以始终将查询更改为使用
NOW()
,而不是尝试用PHP生成日期。我假设该列是一个实时数据类型,而不是VARCHAR()?您好,刚刚检查过,该列是时间戳。在原始的post.Riggs中添加了代码,我可能搞砸了。列类型是timestamp而不是DATETIME,而且我已经将默认值设置为CURRENT_timestamp。也许我甚至不必保存这个专栏。我如何确保它将是格林尼治标准时间和24小时?谢谢,问题不在我发送的脚本中,这就是为什么更改没有解决问题。你上面的建议解决了问题。谢谢你,保罗