将JS Dates()传递给PHP会减少18小时

时间:2016-01-02 05:48:29

标签: javascript php jquery html date

我想在startdate和enddate之间选择MySQLi记录,所以我有一个JS脚本允许我输入日期(使用HTML日期箱类型输入),我使用JQuery的$ .post方法传递给PHP脚本。我的JS代码是:

startDate = new Date(document.getElementById("fromDate").value);
startDate = new Date(startDate.getUTCFullYear(),startDate.getUTCMonth(), startDate.getUTCDate(), startDate.getUTCHours(), startDate.getUTCMinutes(), startDate.getUTCSeconds()); 
endDate = new Date(document.getElementById("toDate").value);
endDate = new Date(endDate.getUTCFullYear(), endDate.getUTCMonth(), endDate.getUTCDate(), endDate.getUTCHours(), endDate.getUTCMinutes(), endDate.getUTCSeconds()); 
$.post("DBQuery.php", {
    startdate: startDate,
    enddate: endDate,
},
function (output) {
var result = JSON.parse(output);
    $('#PHPStartDate').html(result.startdate).show();
    $('#PHPEndDate').html(result.enddate).show();
});

我的PHP代码是:

$startdate = date('Y-m-d h:i:s',strtotime($_POST["startdate"]));
$enddate = date('Y-m-d h:i:s',strtotime($_POST["enddate"]));
$con = mysqli_connect("localhost","username","password","dbase");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="SELECT * FROM Hits WHERE timestamp BETWEEN '$startdate' AND '$enddate'";
if ($result = mysqli_query($con,$sql)) {
$visitors = mysqli_num_rows($result);
}
$sql="SELECT DISTINCT session FROM Hits WHERE timestamp BETWEEN   '$startdate' AND '$enddate'";
if ($result = mysqli_query($con,$sql)) {
$sessions = mysqli_num_rows($result);
}
$sql="SELECT DISTINCT country FROM Hits WHERE timestamp BETWEEN '$startdate' AND '$enddate'";
if ($result = mysqli_query($con,$sql)) {
$countries = mysqli_num_rows($result);
}
$sql="SELECT DISTINCT city FROM Hits WHERE timestamp BETWEEN '$startdate' AND '$enddate'";
if ($result = mysqli_query($con,$sql)) {
$cities = mysqli_num_rows($result);
}
$output = json_encode(array("visitors"=>$visitors,"sessions"=>$sessions,"countries"=>$countries,"cities"=>$cities,"startdate"=>$startdate,"enddate"=>$enddate));
echo $output;
mysqli_free_result($result);
mysqli_close($con);

然而,PHP返回的日期比JS传递给PHP的日期落后18个小时 - 非常奇怪!我的浏览器和MAMP服务器在同一台机器上(我的iMac),我住在泰国(UTC + 7小时)。

以下是使用以下代码在HTML中显示内容的屏幕截图:

<div id="reportTitle">
            Report of site activity from
            <span id="startTime"></span>on<span id="startDate"></span>to
            <span id="endTime"></span>on<span id="endDate"></span><br>
            for<span id="showVisitors"></span>
            <span id="showCities"></span>
            <span id="showCountries"></span>
        </div>
        <div id="reportBody">
            <div>
                <span><h3>From</h3></span><span id="PHPStartDate"></span>
                <span><h3>to</h3></span><span id="PHPEndDate"></span>

屏幕截图顶部显示的第一组日期只是JS startdateenddate变量,而较低的日期集是PHP变量$startdate返回的日期和$enddate不应该改变(但事实上是18小时前!)。 Screenshot of JS and PHP dates 我怀疑问题与时区有关,但考虑到泰国是UTC + 7,很难找到18小时时差的来源。

0 个答案:

没有答案