Javascript 将JS Dates()传递给PHP减去18小时
我想在startdate和enddate之间选择MySQLi记录,这样我就有了一个JS脚本,允许我输入日期(使用HTML日期框类型的输入),并使用JQuery的$.post方法将其传递给PHP脚本。我的JS代码是: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 = 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>
现场活动报告来自
向
在
对于
从…起
到
屏幕截图顶部显示的第一组日期只是JSstartdate
和enddate
变量,较低的一组日期是PHP变量$startdate
和$enddate
返回的日期,它们本不应该更改(但实际上早了18小时!)。
我怀疑问题与时区有关,但鉴于泰国是UTC+7,很难确定18小时的时差来自何处。您应该只使用服务器计算时间,除非您希望客户端能够更改它。当然,您应该使用任何一种方法。我尝试过插入
date\u default\u timezone\u set('UTC')将>编码到我的PHP脚本中,但没有区别。我确实需要客户端能够选择日期,因为用户需要能够指定这些日期作为报表的搜索条件。