在 Carbon 解析中没有得到正确的日期

Not getting correct date in Carbon parse

我正在使用 laravel 5.6 并通过 dx 数据网格添加日期,但是它给出的当前日期不是我选择的日期。

我曾尝试更改日期格式,但在这种情况下,日期是正确的。第一次插入后它给我错误的日期(即 1970-01-01)。

$grids = $request->except('_token');
$request->request->set('attendance_date', Carbon::parse($request- 
>attendance_date)->format('Y-m-d'));

$grids=array();
$grids['name'] = $request['item']['name'];
$grids['attendance_type'] = $request['item']['attendance_type'];
$grids['dept'] = $request['item']['dept'];
$grids['user_id'] = $request['item']['user_id'];
$grids['attendance_date'] = $request->attendance_date;
$grids['attendance_month'] = $request->attendance_month;
$grids['attendance_year'] = $request->attendance_year;
$grids['org_name'] = $request->org_name;
$grids['org_id'] = $request->org_id;
dd($grids);

  $requesteddate = $request->attendance_date;
  $requesteduser_id = $grids['user_id'];
  $attendances = DB::table('attendances')->where(['user_id' => 
  $requesteduser_id])->get()->toArray();
   foreach ($attendances as $key => $value) {
    $dbattendance_date = $value->attendance_date;
    $dbattendance_user_id = $value->user_id;

    if ($dbattendance_date == $requesteddate && $dbattendance_user_id == 
       $requesteduser_id) {

        $insert['status'] = 'error';
        $insert['message'] = 'Attendance Already Exits';
        return Response()->json($insert);

    }
}
$insert = Attendance::create($grids);
return Response()->json($insert);

你的问题中有一些不相关的信息,我需要知道一些问题才能更准确。话虽这么说,但我怀疑可能会发生以下几种可能性:

可能性 #1

您关闭了错误报告功能。导致您无法获得正确日期的原因有很多种,而且经常with error reporting turned on您会看到原因。例如,您对 $request->attendance_date 的使用可能会返回 null 值,导致解析回退到可能的第一个 UTC 日期。

可能性 #2

您正在做 $request->request->set('attendance_date'... 而不是 $request->set('attendance_date'。不确定你为什么要这样做,但稍后当你尝试使用 $request->attendance_date 时,会出现 null 值,因为它从未正确设置。同样,您可能会看到此问题,并且错误 reporting/display 错误已打开。

可能性 #3

Request 输入的日期有误。这可以是从空字符串到无效日期的任何内容。一个好的经验法则是,如果 PHP 的原生 strtotime() 函数可以正确解析它,那么 Carbon 也可以。

我用这个解决了

$newattendance_date = $request['item']['attendance_date'];
    if(strpos($newattendance_date,' GMT') !== false){
        $newattendance_date = substr($newattendance_date,0,strpos($newattendance_date,' GMT'));
        $newattendance_date = strtotime($newattendance_date);
        $newattendance_date =  date('Y-m-d', $newattendance_date); 
    }
    $attendance_date= $newattendance_date;