Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
时间验证总是返回false。PHP日期时间,Laravel_Php_Laravel_Validation_Date - Fatal编程技术网

时间验证总是返回false。PHP日期时间,Laravel

时间验证总是返回false。PHP日期时间,Laravel,php,laravel,validation,date,Php,Laravel,Validation,Date,我正在尝试创建一个控制器,用于验证时间变量日期和时间。 问题是代码可以正确地验证日期和签入时间,但签出时间总是得到错误的值。 $checkOut的每个变量始终结束验证,因为无效,签出时间格式错误 更新:现在我在这里只使用2个控制器,扩展checkerController的debug_控制器将接收csv文件并检查csv文件中的每一行。 如果存在任何无效的数据格式,$result将包含“格式无效的原因”。使用此代码validateDate($id,$date,$checkIn,$checkOut),

我正在尝试创建一个控制器,用于验证时间变量日期和时间。 问题是代码可以正确地验证日期和签入时间,但签出时间总是得到错误的值。
$checkOut
的每个变量始终结束验证,因为
无效,签出时间格式错误

更新:现在我在这里只使用2个控制器,扩展checkerController的debug_控制器将接收csv文件并检查csv文件中的每一行。 如果存在任何无效的数据格式,
$result
将包含“格式无效的原因”。使用此代码
validateDate($id,$date,$checkIn,$checkOut)
,值为
$checkOut
,实际为false的值返回false

奇怪的是,当我使用更少的csv文件行时,最后一行实际上可以返回true

内部csv文件

198601082010082030,2018-02-30,07:15:01,14:00:00
198601082010082030,2018-06,08:15:01,14:00:00
198601082010082030,2018-06-05,25:15:01,14:00:00
198601082010082030,2018-06-05,08:15,14:00:00
198601082010082030,2018-06-05,08:15:01,14:00:00
198601082010082030,2018-06-06,13:50:32,14:10:00
198601082010082030,2018-06-07,07:50:33,15:10:00
198601082010082030,2018-02-30,07:50:33,15:10:00
198601082010082030,2018-06-07,26:50:33,15:10:00
198601082010082030,2018-06-08,07:50:34,16:10:00
198601082010082030,2018-06-09,07:50:35,15:00:00
198601082010089999,2018-06-10,07:30:00,15:20:00
198601082010082030,2018-06-11,07:30:01,15:00:30
198601082010082030,2018-06-12,07:30:02,15:00:30
198601082010082030,2018-06-13,07:30:03,15:00:30
198601082010082030,2018-06-14,07:30:04,15:00:30
第一个控制器包含检查输入的功能

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use DateTime;

class checkerController extends Controller {

    function validateTime($time)
    {
        $d = DateTime::createFromFormat('H:i:s', $time);
        return $d && $d->format('H:i:s') == $time;
    }

    function validateDate($id, $date, $checkIn, $checkOut)
    {
        $d = DateTime::createFromFormat('Y-m-d', $date);
        $valid = ($d && $d->format('Y-m-d') == $date);
        if ($valid == false) {
            $data = "Not Valid, Wrong Date Format";
            return $data;
        } else {
            $validCheckOut = $this->validateTime("$checkOut");
            if ($validCheckOut == false) {
                return "checkout not valid --> $checkOut";
            } else {
                return "checkout valid";
            }

        }
    }
}


问题出在输入中

198601082010082030,2018-02-30,07:15:01,14:00:00
198601082010082030,2018-06,08:15:01,14:00:00
198601082010082030,2018-06-05,25:15:01,14:00:00
198601082010082030,2018-06-05,08:15,14:00:00
198601082010082030,2018-06-05,08:15:01,14:00:00
198601082010082030,2018-06-06,13:50:32,14:10:00
198601082010082030,2018-06-07,07:50:33,15:10:00
198601082010082030,2018-02-30,07:50:33,15:10:00
198601082010082030,2018-06-07,26:50:33,15:10:00
198601082010082030,2018-06-08,07:50:34,16:10:00
198601082010082030,2018-06-09,07:50:35,15:00:00
198601082010089999,2018-06-10,07:30:00,15:20:00
198601082010082030,2018-06-11,07:30:01,15:00:30
198601082010082030,2018-06-12,07:30:02,15:00:30
198601082010082030,2018-06-13,07:30:03,15:00:30
198601082010082030,2018-06-14,07:30:04,15:00:30
为了获得列的每个值,我使用
list($id,$date,$checkIn,$checkOut)=分解(“,”,$key)
将每列分配给一个变量。 问题是最后分解的值没有用于分隔符的
。因此,即使值是完全相同的字符串,出于某种原因,它也总是返回false。 当我在最后一个值中添加逗号时,代码可以很好地验证。 以下是添加了逗号最后一个值的输入:

198601082010082030,2018-02-30,07:15:01,14:00:00,
198601082010082030,2018-06,08:15:01,14:00:00,
198601082010082030,2018-06-05,25:15:01,14:00:00,
198601082010082030,2018-06-05,08:15,14:00:00,
198601082010082030,2018-06-05,08:15:01,14:00:00,
198601082010082030,2018-06-06,13:50:32,14:10:00,
198601082010082030,2018-06-07,07:50:33,15:10:00,
198601082010082030,2018-02-30,07:50:33,15:10:00,
198601082010082030,2018-06-07,26:50:33,15:10:00,
198601082010082030,2018-06-08,07:50:34,16:10:00,
198601082010082030,2018-06-09,07:50:35,15:00:00,
198601082010089999,2018-06-10,07:30:00,15:20:00,
198601082010082030,2018-06-11,07:30:01,15:00:30,
198601082010082030,2018-06-12,07:30:02,15:00:30,
198601082010082030,2018-06-13,07:30:03,15:00:30,
198601082010082030,2018-06-14,07:30:04,15:00:30,

旁注:摆脱代码中混合语言的不良习惯。您有英文命名变量,但也有
($nip、$tanggal、$masuk、$keluar)
。坚持使用一种语言(最好的,英语)实际上所有的变量都是我的母语,花点时间将所有变量更改为英语,但我将尝试仅在stackoverflow上的这篇文章中更改它。我已经更改了所有变量名称sir@MarcinOrlowskiIs您的$date参数是
Y-m-d
格式吗?代码中没有任何错误。尝试使用
$data=“无效,签出时间格式错误--”调试结果$结帐这样您就可以看到是什么导致了错误
198601082010082030,2018-02-30,07:15:01,14:00:00,
198601082010082030,2018-06,08:15:01,14:00:00,
198601082010082030,2018-06-05,25:15:01,14:00:00,
198601082010082030,2018-06-05,08:15,14:00:00,
198601082010082030,2018-06-05,08:15:01,14:00:00,
198601082010082030,2018-06-06,13:50:32,14:10:00,
198601082010082030,2018-06-07,07:50:33,15:10:00,
198601082010082030,2018-02-30,07:50:33,15:10:00,
198601082010082030,2018-06-07,26:50:33,15:10:00,
198601082010082030,2018-06-08,07:50:34,16:10:00,
198601082010082030,2018-06-09,07:50:35,15:00:00,
198601082010089999,2018-06-10,07:30:00,15:20:00,
198601082010082030,2018-06-11,07:30:01,15:00:30,
198601082010082030,2018-06-12,07:30:02,15:00:30,
198601082010082030,2018-06-13,07:30:03,15:00:30,
198601082010082030,2018-06-14,07:30:04,15:00:30,