遇到一个非常好的数值

时间:2011-05-26 09:30:22

标签: php validation date time

我有一个表单,它将两个日期(开始和结束)传递给PHP脚本,该脚本将这些日期添加到数据库中。我在验证这个问题时遇到了问题。我一直收到以下错误

遇到未正确形成的数值

这是我使用以下

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

但是当我使用许多网站建议的 strtotime()函数时,我获得的unix时间戳日期为1/1/1970。 我有什么想法可以得到正确的日期吗?

11 个答案:

答案 0 :(得分:190)

因为你将一个字符串作为第二个参数传递给date函数,它应该是一个整数。

  

string date(string $ format [,int $ timestamp = time()])

尝试strtotime将任何英文文本日期时间描述解析为Unix时间戳(整数):

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

答案 1 :(得分:7)

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

如果您愿意发布您目前收到的格式,我可以为您添加一个示例。

答案 2 :(得分:6)

只需使用strtotime()函数解决此问题。

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

答案 3 :(得分:5)

我遇到了同样的情况(在我的情况下,在Drupal视图中的自定义PHP字段中有一个日期值),对我有用的是使用intval而不是strtotime将值转换为整数 - 因为它基本上是一个时间戳,但是以字符串而不是整数的形式。显然每个人都不会这样,但值得一试。

答案 4 :(得分:2)

这对我有很大帮助 -

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

答案 5 :(得分:1)

这是一个老问题,但这条消息可能会发生另一种微妙的方式。它很好地解释了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可能已动态更改{的返回类型{1}}到字符串。

解决方法是定义自定义异常处理程序,如:

$e->getCode()

答案 6 :(得分:0)

如果错误发生在任何计算时,请仔细检查这些值是否包含任何逗号(,)。值必须仅为整数/浮点格式。

答案 7 :(得分:0)

您需要使用date_default_timezone_set()设置时区。

答案 8 :(得分:0)

如果仅包含数字,则传递字符串不一定是问题。

发生这种情况的另一个原因是,如果前后有空格。例如。 “ 1557399276”

答案 9 :(得分:0)

当您对使用字母和数字(字母数字)组合的变量执行计算时,会发生此错误,例如24kb,886ab ...

我在以下功能中有错误

function get_config_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);       
    switch($last) {
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $this->fix_integer_overflow($val);
}

该应用程序上传了图片,但没有用,它显示了以下警告:

enter image description here

解决方案:intval()函数提取包含字母数字数据的变量的整数值,并创建一个具有相同值但用intval()转换为整数的新变量。功能。这是代码:

function get_config_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    $intval = intval(trim($val));
    switch($last) {
        case 'g':
            $intval *= 1024;
        case 'm':
            $intval *= 1024;
        case 'k':
            $intval *= 1024;
    }
    return $this->fix_integer_overflow($intval);
}

答案 10 :(得分:-1)

如果$ _GET ['start_date']是字符串,则将其转换为整数或双精度以进行数字处理。

$int = (int) $_GET['start_date']; //Integer
$double = (double) $_GET['start_date']; //It takes in floating value with 2 digits