我正在使用日期选择器来选择一个日期并将该日期传递给PHP以显示特定日期的图像(从这里开始)。奇怪的是,这在Firefox中工作正常,但在Chrome,Internet Explorer,Edge和Opera中则不行。
日期选择器页面上的 JavaScript
$("#datepicker").datepicker({
onSelect: function() {
var date = $('#datepicker').datepicker("getDate");
$.ajax({
url: "processdate.php",
type: "POST",
async: true,
data: {
selected_date: date
},
success: function(resp) {
if (resp === "true") {
window.location.href = "test.php";
} else {
alert("nope :-(");
}
}
});
};
这被传递给processdate.php
,从那里我进一步使用它:
<?php
if(!isset($_SESSION)){
session_start();
}
if(isset($_POST["selected_date"])){
$_SESSION["date"] = $_POST["selected_date"];
echo "true";
} else {
echo "false";
}
?>
我创建了test.php
来回显数据,看看它失败的原因:
<?php
if(!isset($_SESSION)){
session_start();
}
$datePicker = $_SESSION["date"];
$datePHP = strtotime($datePicker);
$date = date('d-m-Y', $datePHP );
echo $datePicker;
echo "<br>";
echo $datePHP;
echo "<br>";
echo $date;
?>
输出测试.php在 Firefox 中,工作以及它应该如何:
周三 三月 02 2016 00:00:00 GMT+0100
1456873200 2016-03-02
输出测试.php在 Chrome 中,不起作用,缺少第二行 (strtotime)
周三 三月 02 2016 00:00:00 GMT+0100 (西欧罗巴 (标准))
1970-01-01
如您所见,Chrome似乎没有回声strtotime
。IE/Edge/Opera也是如此。这让我很困惑,这怎么可能?我尝试设置 getDate 格式,但这似乎不起作用?
我在Chrome和Firefox上都有同样的问题。 PHP strtotime() 函数无法识别日期/时间字符串,因为它包含时区信息。 如果您像下面这样剪掉此信息,它会起作用(您必须手动调整时区):
<?php
if(!isset($_SESSION)){
session_start();
}
$datePicker = $_SESSION["date"];
// Remove time zone information from the string so that it can be parsed
$index=strpos($datePicker,"GMT");
$datePicker=substr($datePicker,0,$index-1);
$datePHP = strtotime($datePicker);
$date = date('d-m-Y', $datePHP );
echo $datePicker;
echo "<br>";
echo $datePHP;
echo "<br>";
echo $date;
?>
你有没有试过做:
console.log(date);
在您的日期变量上并检查控制台,以确保它实际上在每个浏览器上都通过日期。问题最有可能出在您的javascript上,因为正如有人已经指出的那样,php是在服务器上执行的,因此它可以在每个浏览器上工作或失败,而不是选择性的。