遇到一个非常好的数值

Dev*_*and 106 php validation time date

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

遇到一个非常好的数值

这是我使用以下内容时

date("d",$_GET['start_date']);
Run Code Online (Sandbox Code Playgroud)

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

小智 208

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

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

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

date("d", strtotime($_GET['start_date']));
Run Code Online (Sandbox Code Playgroud)


Wes*_*orp 7

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

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


Vla*_*ero 7

当您对使用字母与数字(字母数字)组合的变量执行计算时会发生此错误,例如 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);
}
Run Code Online (Sandbox Code Playgroud)

该应用程序上传图像但它不起作用,它显示以下警告:

在此处输入图片说明

解决方案: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);
}
Run Code Online (Sandbox Code Playgroud)

函数 fix_integer_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;
}
Run Code Online (Sandbox Code Playgroud)


Fai*_*sal 6

您只需使用strtotime()功能即可解决此问题.

date("d",strtotime($_GET['start_date']));
Run Code Online (Sandbox Code Playgroud)


小智 5

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


Tus*_*ade 5

这对我帮助很大:

$new_date = date_format(date_create($old_date), 'Y-m-d');
Run Code Online (Sandbox Code Playgroud)

在这里,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
?>
Run Code Online (Sandbox Code Playgroud)