【问题标题】:date( ) returns 1970-01-01date( ) 返回 1970-01-01
【发布时间】:2014-01-16 20:05:58
【问题描述】:

我正在使用具有以下格式 mm/dd/yyyy 的 jquery datepicker,但对于 sql db,我需要它是 yyyy-mm-dd,所以我正在使用它。

   $date  = date("Y-m-d",strtotime($startdate));

以下

 $query = "INSERT INTO complete_table ( name, startdate) VALUES ('$_POST[name]', '$date')";

不幸的是,无论输入是什么,我都在数据库中注册了 1970-01-01。 知道我做错了什么吗?非常感谢您的帮助。

【问题讨论】:

  • 尝试回显 strtotime 函数的输出,如果返回 0,那就是你的错误。日期是 UNIX 时间戳的开始。
  • 另请注意,查询本身易受 SQL 注入攻击。如果您想了解更多信息,请前往stackoverflow.com/questions/60174/…

标签: php sql date picker


【解决方案1】:

当你从date() 得到1970-01-01 时,这意味着时间戳不正确。那个日期是UNIX epoch

当涉及到 Javascript(在这种情况下是一个日期选择器)时,您应该始终确保您得到的实际上是您所期望的。简单地通过strtotime() 传递它会导致像你在这里遇到的问题。

处理日期的一种好方法是使用datetime 扩展名。它有一个静态方法DateTime::createFromFormat,可以让您使用任何格式解析任何日期:

// The value from the datepicker
$dpValue = '12/30/2013';

// Parse a date using a user-defined format
$date = DateTime::createFromFormat('d/m/Y', $dpValue);

// If the above returns false then the date
// is not formatted correctly
if ($date === false) {
    header('HTTP/1.0 400 Bad Request');
    die('Invalid date from datepicker!')
}

// Using the parsed date we can create a
// new one with a formatting of out choosing
$forSQL = $date->format('Y-m-d');

// ...

【讨论】:

    【解决方案2】:

    在初始化日期选择器时将 dateformat 放入 jquery 中

    $( "#id/.class" ).datepicker({dateFormat: 'yy-mm-dd'}); 
    

    这种格式会在mysql db上插入(在客户端完成),否则在服务器端代码上格式化。

    【讨论】:

      【解决方案3】:

      $startdate 无效,因此strtotime 函数返回任何低于 86400(很可能是 0)的值,即一天中的秒数。 $startdatehere的正确格式请参考PHP文档。

      【讨论】:

        【解决方案4】:

        它被称为时代。所以startdate 为零。

        【讨论】:

        • $startdate 实际上不必为零,但strtotime 函数的结果却可以。确切地说,或者低于 86400 的任何值。
        • @jeroenvisser101 - 假设问题在于 startdate 的值等于 0。
        猜你喜欢
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        相关资源
        最近更新 更多