【发布时间】:2019-01-05 19:17:45
【问题描述】:
我正在尝试创建一个控制器来验证时间变量日期和时间。
问题是代码可以正确验证日期和签入时间,但签出时间总是得到错误的值。
$checkOut 的每个变量总是以 Not Valid, Wrong Check Out Time Format 结束验证。
更新:现在我在这里只使用 2 个控制器,扩展 checkerController 的 debug_controller 将接收 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";
}
}
}
}
第二个控制器,获取请求csv文件,继承父checkerController
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Str;
use Storage;
class debug_controller extends checkerController {
function index(request $request){
$ext = $request->file('csv')->getClientOriginalExtension();
$filename = Str::random(10).".$ext";
$path=$request->file('csv')->storeAs('public/csv/', $filename);
$dir = asset("storage/csv/$filename");
$file = file("$dir");
$arrContent = Array();
foreach ($file as $key) {
list($id,$date,$checkIn,$checkOut)=explode(",", $key);
$result = $this->validateDate($id,$date,$checkIn,$checkOut);;
$arrtemp = array('id'=> $id, 'date' => $date, 'checkIn' => $checkIn, 'checkOut' => $checkOut, 'result' => $result);
array_push($arrContent, $arrtemp);
}
foreach ($arrContent as $row) {
echo $row['id']." | ".$row['date']." | ".$row['checkIn']." | ".$row['checkOut']." | ".$row['result']."<br><br>";
}
}
}
?>
【问题讨论】:
-
旁注:改掉代码中混用语言的坏习惯。你有英文命名变量,还有
($nip, $tanggal, $masuk, $keluar)。坚持一种语言(最好,英语) -
实际上所有变量都是我的母语,需要一些时间将所有变量更改为英文,但我会尝试仅为 stackoverflow 上的这篇文章更改它。
-
我已经更改了所有变量名称先生@MarcinOrlowski
-
你的$date参数是
Y-m-d格式吗? -
您的代码没有问题。尝试使用
$data = "Not Valid, Wrong Check Out Time Format -- " . $checkOut;调试结果,这样你就可以看到是什么出错了
标签: php laravel validation date