【问题标题】:JQuery Datepicker getDate format and PHPJQuery Datepicker getDate 格式和 PHP
【发布时间】:2016-03-12 20:29:33
【问题描述】:

我正在使用日期选择器来选择一个日期并将该日期传递给 PHP 以显示某个日期的图像 (from here)。奇怪的是,这在 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;
?>

在 Firefox 中输出 Test.php,工作原理以及应该如何:

2016 年 3 月 2 日星期三 00:00:00 GMT+0100
1456873200
02-03-2016

在 Chrome 中输出 Test.php,不工作,第二行(strtotime)丢失

2016 年 3 月 2 日星期三 00:00:00 GMT+0100(西欧(标准))

01-01-1970

如您所见,Chrome 似乎没有回显strtotime。 IE/Edge/Opera 也是如此。这让我很困惑,这怎么可能?我尝试设置 getDate 格式,但似乎不起作用?

【问题讨论】:

  • 删除@抑制可能发生的任何错误。
  • 我做到了,没有错误。出于某种原因,Chrome 似乎对 strtotime 没有任何作用
  • Chrome 没有对 strtotime() 做任何事情,strtotime() 是一个 php 函数,在服务器上执行。
  • @NeilMasters 我知道,但在 Firefox 中它会生成一些东西,而在 Chrome 中则不会。那怎么解释呢? POST 工作正常,因为第一行日期是正确的。第二行未在 Chrome 中显示,因此第三行 (01-01-1970) 失败。这让我很困惑为什么。

标签: php jquery datepicker


【解决方案1】:

我在 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;
?>

【讨论】:

  • 哇,你是对的!就我而言,Chrome 之后添加了:“(西欧(西欧)(标准)”(荷兰语)。我什至没有注意到那部分,但是如果我删除那部分,它就可以了!诡异的。首先我要说的是,应该有一种方法可以从日期选择器中获取更清晰的数据,但是如何。
  • 耶,尝试了几种不同的方法,但没有结果。
  • 知道了,添加 "date = $.datepicker.formatDate("dd-mm-yy", date);"在“getDate”行之后的 onSelect 中
  • 你说得对,这似乎有效!我之前试过没有date =。很好,谢谢。
【解决方案2】:

你有没有尝试过:

console.log(date);

在您的日期变量上并在控制台中检查只是为了确保它实际上是在每个浏览器上获取日期。问题很可能出在您的 javascript 上,就像有人已经指出的那样,php 是在服务器上执行的,因此它在每个浏览器上都可以工作或失败,而不是选择性的。

【讨论】:

  • 我应该把那个放在哪里?查看两个浏览器的第一行输出,我会说所有浏览器的日期都在低谷。该规则是我从日期选择器中选择的正确日期,如果我选择另一个日期,则该规则会更改。我首先尝试在 javascript 中格式化该规则,但我似乎也无法使其工作?
  • 直接在var date = $('#datepicker').datepicker("getDate"); 之后,我也会在你的成功函数中添加一个console.log(resp)。这将使事情更容易调试
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 2012-04-01
相关资源
最近更新 更多