Javascript 将JS Dates()传递给PHP减去18小时

Javascript 将JS Dates()传递给PHP减去18小时,javascript,php,jquery,html,date,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(), star

我想在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
startdate
enddate
变量,较低的一组日期是PHP变量
$startdate
$enddate
返回的日期,它们本不应该更改(但实际上早了18小时!)。
我怀疑问题与时区有关,但鉴于泰国是UTC+7,很难确定18小时的时差来自何处。

您应该只使用服务器计算时间,除非您希望客户端能够更改它。当然,您应该使用任何一种方法。我尝试过插入
date\u default\u timezone\u set('UTC')编码到我的PHP脚本中,但没有区别。我确实需要客户端能够选择日期,因为用户需要能够指定这些日期作为报表的搜索条件。