Encontrar días entre dos fechas en laravel [duplicate]

3 minutos de lectura

Avatar de usuario de Kiran Rai Chamling
Kiran Rai Chamling

Tengo fechas. Ahora, necesito encontrar la diferencia entre estos dos para más cálculos.

Intenté de diferentes maneras pero no puedo solucionar los problemas. ¿Alguien puede decirme la mejor manera de hacerlo?

mi código es:

public function leaveRequest(request $request)
{
    $fdate=$request->Fdate;
    $tdate=$request->Tdate;

    $start = Carbon::parse($fdate)->format('Y/m/d');
    $end =  Carbon::parse($tdate)->format('Y/m/d');

    $days = $end->diffInDays($start);
    /*$days=date_diff($end,$start);*/
    echo $days;
    exit;

    $user = User::findOrFail(Auth::user()->id);
    Mail::send('pages.leave', ['user' => $request,'userId'=>$user], function ($m) use ($request) {
        $m->to($request->Email)->subject('Leave Request!');
    });

    DB::table('leaves')->insert(
        ['user' => Auth::user()->id, 'request_date' => Carbon::now(),'start' => $start,'end' => $end,'permissions' => "Pending",'leave_status' => "Active"]
    );

    return redirect()->back()->with('message','Your request has sent');
}

Si puedo obtener los días, puedo insertarlo en la tabla de hojas.

  • La respuesta real a esta pregunta es hacer simplemente $start = Carbon::parse($fdate); y $end = Carbon::parse($tdate); Al usar el Carbon::format() función obtuvo una cadena, por lo que habría recibido un error como “Llamar a la función miembro diffInDays () en un no objeto”

    – miken32

    5 de diciembre de 2022 a las 23:14


Avatar de usuario de Abhay Maurya
Abhay Maurya

No necesita Carbon, puede hacerlo usando PHP simple. Lo mejor es usar la forma PHP OOP. Como esto:

$fdate = $request->Fdate;
$tdate = $request->Tdate;
$datetime1 = new DateTime($fdate);
$datetime2 = new DateTime($tdate);
$interval = $datetime1->diff($datetime2);
$days = $interval->format('%a');//now do whatever you like with $days

PD: DateTime no es una función, es una clase, así que no olvides agregar: use DateTime; en la parte superior de su controlador para que pueda hacer referencia a la clase raíz correcta, o usar \DateTime() en cambio al hacer su instancia.

  • Estoy escribiendo este código en un controlador. Este código arroja un error: no se encontró la clase ‘App\Http\Controllers\Admin\DateTime’. DateTime funciona con php.

    – Kiran Rai Chamling

    3 de enero de 2017 a las 13:25

  • Agregar use DateTime; en la parte superior del controlador y vuelve a intentarlo.

    – Abhay Maurya

    3 de enero de 2017 a las 13:27

  • Probé eso y funcionó!. Antes, estaba usando DateTime of Carbon. No me ayudó. Gracias

    – Kiran Rai Chamling

    03/01/2017 a las 13:30

  • @Kiran Rai Chamling, marque la respuesta como aceptada si le ayudó a cerrar este hilo. Gracias

    – Abhay Maurya

    3 de enero de 2017 a las 13:31


  • En caso de que algo haya salido mal, puede agregar try { } catch (\Exception $e){} en tu DateTime código. Porque DateTime la clase tiraría Exception cuando ocurrió el error. Gracias a PHPStorm por recordarme.

    – ibnɘꟻ

    24 de enero de 2020 a las 3:16

avatar de usuario de paddy sable
marta de arroz

$to = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', '2015-5-5 3:30:34');
$from = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', '2015-5-6 9:30:34');

$diff_in_days = $to->diffInDays($from);

print_r($diff_in_days); // Output: 1

Avatar de usuario de HadiNiazi
HadiNiazi

¿Por qué no usar Carbon Helper para obtener la fecha exacta?

$to = \Carbon\Carbon::parse($request->to);
$from = \Carbon\Carbon::parse($request->from);

        $years = $to->diffInYears($from);
        $months = $to->diffInMonths($from);
        $weeks = $to->diffInWeeks($from);
        $days = $to->diffInDays($from);
        $hours = $to->diffInHours($from);
        $minutes = $to->diffInMinutes($from);
        $seconds = $to->diffInSeconds($from);

Cualquiera que use la versión de PHP

$fdate = $request->Fdate;
$tdate = $request->Tdate;
$datetime1 = strtotime($fdate); // convert to timestamps
$datetime2 = strtotime($tdate); // convert to timestamps
$days = (int)(($datetime2 - $datetime1)/86400); // will give the difference in days , 86400 is the timestamp difference of a day

avatar de usuario de rahul modi
raul modi

$from=Carbon::now()->subDays(5)->toDateString();

$current=Carbon::now()->toDateString();

$peoples= People::whereBetween('joiningdate',array($diff,$current))->get();

  • Debe proporcionar una explicación de por qué su respuesta aborda la pregunta original. Consulte stackoverflow.com/help/how-to-answer

    – Bob Dalgliesh

    28 de enero de 2020 a las 13:36

Avatar de usuario de AhsanRao
Ahsan Rao

// get from and throung date
$from_date = Carbon::parse(date('Y-m-d', strtotime('2022-03-10'))); 
$through_date = Carbon::parse(date('Y-m-d', strtotime('2022-03-12'))); 
    
// get total number of minutes between from and throung date
$shift_difference = $from_date->diffInDays($through_date);

// will output $shift_difference = 2

  • Debe proporcionar una explicación de por qué su respuesta aborda la pregunta original. Consulte stackoverflow.com/help/how-to-answer

    – Bob Dalgliesh

    28 de enero de 2020 a las 13:36

Avatar de usuario de Labhansh Satpute
Labhansh Sapute

Utilicé este método y está funcionando correctamente para mí. Si desea verificar la fecha de nacimiento con la edad solicitada, utilícela.

$date_of_birth = Carbon::parse($request->input('student_dob'));
$current_date = Carbon::now();

if ($current_date->diffInYears($date_of_birth) != $request->input('student_age')) {
    return response(['status' => false, 'error' => [
        'student_dob' => ['date of birth not matched with age']
    ]], 500);
}

¿Ha sido útil esta solución?