我有一个表单,它将两个日期(开始和结束)传递给PHP脚本,该脚本将这些日期添加到数据库中。我在验证这个问题时遇到了问题。我一直收到以下错误
遇到未正确形成的数值
这是我使用以下
的时候date("d",$_GET['start_date']);
但是当我使用许多网站建议的 strtotime()函数时,我获得的unix时间戳日期为1/1/1970。 我有什么想法可以得到正确的日期吗?
答案 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);
}
该应用程序上传了图片,但没有用,它显示了以下警告:
解决方案::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