遇到的非格式良好的数值

我有一个表单,它将两个日期(开始和结束)传递给一个 PHP 脚本,该脚本将这些日期添加到数据库中。我无法证实这一点。我不断得到以下错误

遇到的非格式良好的数值

这时我使用以下命令

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

但是当我使用许多网站建议的 Strtotime ()函数时,我得到的 Unix 时间戳日期是1970年1月1日。 有什么办法能帮我找到正确的日期吗?

509946 次浏览

我打赌 $_GET['start_date']不是数字,而是 strtotime不支持的日期格式。您将需要重新格式化日期为一个可行的格式为 再见或使用 爆炸/时间的组合。

我可以给你添加一个例子,如果你足够友好,张贴格式,你目前收到。

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

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

试试 再见,它将 将任何英文文本日期时间描述解析为 Unix 时间戳(整数) :

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

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

这是一个古老的问题,但还有另一种微妙的方式可以发生这一信息。在这里,在文件里解释得很好。

想象一下这样的场景:

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();
}
}

这对我帮助很大

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

在这里,date_create()为给定的日期提供一个日期对象,而 date_format()将以给定的格式设置它。

比如说,

<?php
$date = date_create("13-02-2013");  // DateTime Object ( [date] => 2013-02-13 00:00:00.000000 [timezone_type] => 3 [timezone] => America/New_York )
echo date_format($date,"Y-m-d");    // 2013-02-13
?>

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

您需要使用 date _ default _ timezone _ set ()设置时区。

使用使用字母和数字(字母数字)组合的变量(例如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);
}

函数 fix _ whole _ overflow

// Fix for overflowing signed 32 bit integers,
// works for sizes up to 2^32-1 bytes (4 GiB - 1):
protected function fix_integer_overflow($size) {
if ($size < 0) {
$size += 2.0 * (PHP_INT_MAX + 1);
}
return $size;
}

如果 $_ GET [‘ start _ date’]是一个字符串,那么将其转换为整数或双精度数字处理。

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

以宇宙程序员的名义

在我的情况下,我收到这个错误

”注意: 在“

我的代码有以上错误:

$end_suggest_time = $rowone['start_suggest_time'] + (24 * 3600);

当我在以前的 $rowone['start_suggest_time']中添加 (int)时,我不会收到这个错误

”注意: 在“

$end_suggest_time = (int) $rowone['start_suggest_time'] + (24 * 3600);

在我的例子中,当出现错误时:

遇到的非格式良好的数值

当我的代码是这样的时候

if (date('y-m-d H:i:s') - $user_token['created_at'] < (60 * 60 * 24)) {
...
}

还有我的修理密码

date_default_timezone_set('Asia/Jakarta');
if (strtotime(date('y-m-d H:i:s')) - strtotime($user_token['created_at']) < (60 * 60 * 24)) {
...
}