2011-05-26 55 views
67

我有一个表单将两个日期(开始和结束)传递给一个将脚本添加到数据库的PHP脚本。我有问题验证这一点。我不断收到以下错误遇到的格式不正确的数字值

非合式数值遇到

这是当我使用下面的

date("d",$_GET['start_date']); 

但是,当我使用的strtotime()功能建议通过许多网站我得到一个unix时间戳日期1970年1月1日。 任何想法如何我可以得到正确的日期?

+4

您需要发布的东西'$ _GET [ '起始日期']'包含的内容。 – JohnP 2011-05-26 09:31:43

+1

我假设你的'$ _GET ['start_date']'不是[时间戳](http://en.wikipedia。org/wiki/Timestamp),这是'date'函数预期的第二个参数 – Nemoden 2011-05-26 09:36:07

+0

DChaplin的第二个答案在这种情况下更合适 – cw24 2015-07-09 19:08:12

回答

150

这可能是因为您将字符串作为第二个参数传递给日期函数。尝试strtotime

date("d",strtotime($_GET['start_date'])); 
6

$_GET['start_date']不是数字是我的赌注,但日期格式不支持strtotime。您需要将日期重新格式化为strtotime的可行格式,或使用explode/mktime的组合。

我可以给你添加一个例子,如果你愿意发布你现在收到的格式。

+0

由于PHP在传递给方法时会自动进行投射,因此投射不会解决问题。 – JohnP 2011-05-26 09:36:40

+0

请检查我的更新。 – 2011-05-26 09:37:35

5

我就遇到了这个同样的情况(在我的情况下,在一个Drupal视图中的自定义PHP领域日期值),以及什么工作适合我使用的替代的strtotime被INTVAL打开值到一个整数 - 因为它基本上是一个时间戳,但以一个字符串而不是一个整数的形式。很明显,每个人都不会这样,但这可能值得一试。

0

这是一个古老的问题,但这种信息可能会发生另一种微妙的方式。它的解释很好here, in the docs

想象一下之情况:

try { 
    // code that triggers a pdo exception 
} catch (Exception $e) { 
    throw new MyCustomExceptionHandler($e); 
} 

而且MyCustomExceptionHandler定义大致是:

class MyCustomExceptionHandler extends Exception { 
    public function __construct($e) { 
    parent::__construct($e->getMessage(), $e->getCode()); 
    } 
} 

这确实会触发自定义异常处理程序一个新的异常,因为Exception类期待一个号码在其构造函数中的第二个参数,但PDOException可能已动态地将返回类型$e->getCode()更改为字符串。

针对此解决方法是定义你喜欢自定义异常处理程序:

class MyCustomExceptionHandler extends Exception { 
    public function __construct($e) { 
    parent::__construct($e->getMessage()); 
    $this->code = $e->getCode(); 
    } 
} 
4

只要你能解决使用strtotime()功能这个问题。

date("d",strtotime($_GET['start_date'])); 
0

这对我帮助很大 -

$new_date = date_format(date_create($old_date), 'Y-m-d');