date()返回1970-01-01

时间:2013-12-29 22:59:36

标签: php sql date picker

我正在使用一个jquery datepicker,格式为mm / dd / yyyy,但我需要它为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。 对我做错了什么的想法?非常感谢你的帮助。

4 个答案:

答案 0 :(得分:2)

1970-01-01返回date()时,表示时间戳不正确。那个日期是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');

// ...

答案 1 :(得分:1)

在初始化类似

的日期选择器时将dateformat放在jquery中
$( "#id/.class" ).datepicker({dateFormat: 'yy-mm-dd'}); 

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

答案 2 :(得分:-1)

$startdate无效,因此strtotime函数返回86400以下的任何内容(很可能为0),这是一天中的秒数。请参阅PHP文档,了解$startdate here的正确格式。

答案 3 :(得分:-3)

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