【问题标题】:DateTime defaulting to 1970-01-01日期时间默认为 1970-01-01
【发布时间】:2014-02-20 19:58:55
【问题描述】:

我正在为我的网站编写一个 PHP 表单。 HTML 端向用户询问他们以 MM/DD/YYYY 格式输入的日期。当该字符串发送到 PHP 时,以下代码会将其更改为 MySQL 将识别的形式

$date = $_POST['date'];
$sqldate = date('Y-m-d', strtotime($date));

但是,当该日期输入我的 MySQL 数据库时,它输入为 1970-01-01,我不知道为什么。

注意:如果我回显 $sqldate,则会收到错误使用未定义的常量 sqldate - 在 C:/MYDIRECTORY 中假设为 'sqldate'

【问题讨论】:

  • 您的 mySQL 字段的类型是什么?时间戳?
  • 如果您的 $date 变量为 NULL,strtotime() 将返回 1979-01-01。打印您的 $date 变量以确保它不为空,然后按照@Mostafa 的建议进行操作。
  • 您看到这种情况发生的$_POST['date'] 的样本值是多少?
  • 如果我回显 $date 它会返回例如 08/18/1994。但是,如果我回显 $sqldate,我会收到一个错误:使用未定义的常量 sqldate - 在 C:\MYDIRECTORY 中假设为 'sqldate'
  • 把var的名字改成datetest而不是sqldate

标签: php mysql sql forms datetime


【解决方案1】:

这个怎么样?

//build a date
$date = date_parse_from_format("m/d/Y", $_POST["date"]);
//output the bits
$sqldate = "$date[year]-$date[month]-$date[day]";

Unix 时间戳是自 1970-01-01 以来的秒数,因此您对 strtotime() 的调用返回 0。

【讨论】:

    【解决方案2】:

    DateTime 如何为您工作?

    <?php
    $dateStr = '08/18/2014';//$_POST['date'];
    $dateTime = new DateTime($dateStr);
    echo $dateTime->format('Y-m-d');
    

    您正在写表单的日期格式是 MM/DD/YYYY。您是否验证输入值以确保始终给出格式?

    【讨论】:

      【解决方案3】:

      这对我有用

      $input_date= trim($_POST["input_date"]);
      $strtotime= strtotime($input_date);
      $date_format= date('Y-m-d',$strtotime);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多