Laravel Carbon obtener inicio + final de la semana actual

2 minutos de lectura

Avatar de usuario de Steve Brown
steve marrón

Estoy trabajando con Laravel 4 en una herramienta para publicar/programar menús de restaurantes en Facebook. Para esto necesito un selector de fecha para la semana actual, comenzando siempre el lunes y terminando siempre el domingo.

Wireframe para el menú del restaurante

he jugado con los ejemplos http://carbon.nesbot.com/docs/#api-getters pero sin éxito.

¿Alguna idea?

Avatar de usuario de its_aggarwal
Es_aggarwal

Esto es bastante simple con Carbon Library. Aquí está el ejemplo de código:

$now = Carbon::now();
$weekStartDate = $now->startOfWeek()->format('Y-m-d H:i');
$weekEndDate = $now->endOfWeek()->format('Y-m-d H:i');

Incluso tienes la opción de cambiar el día de inicio y finalización de la semana. Es así,

$start = $now->startOfWeek(Carbon::TUESDAY);
$end = $now->endOfWeek(Carbon::MONDAY);

Fuente: https://carbon.nesbot.com/docs/#api-getters

  • esto establecerá ambas variables al final de la semana, como ->startOfWeek cambiará la variable, no la clonará

    – usuario151496

    20 de julio de 2021 a las 9:37

  • Para evitar hacer un clon, use ->copy()

    – Máx.

    11 de agosto de 2021 a las 14:07

  • Es mejor usar la interfaz para las constantes de Carbono: CarbonInterface::MONDAY

    – DMat

    4 de julio de 2022 a las 11:37

Avatar de usuario de Marko Milivojevic
Marko Milivojevic

La mejor manera es usando el complemento jquery.

http://api.jqueryui.com/datepicker/

En su view.blade.php haga un campo de entrada

<input type="text" id="in">

En su archivo de secuencia de comandos, seleccione esta entrada y establezca el intervalo de fechas

<script>
        $("#in").datepicker({
            minDate: new Date("{{Carbon\Carbon::now()->startOfWeek()->format('Y/m/d')}}"),
            maxDate: new Date("{{Carbon\Carbon::now()->endOfWeek()->format('Y/m/d')}}")
        });
</script>

Esto debería verse así

http://imgur.com/K0ZhiVy

Tenga en cuenta que deberá usar CarbonImmutable si desea que la fecha de inicio siga siendo el comienzo de la semana. (Además, no es “Laravel Carbon”, es solo Carbon)

$now = CarbonImmutable::now();
$weekStartDate = $now->startOfWeek();
$weekEndDate = $now->endOfWeek();

  • Gracias. Estaba totalmente perplejo en cuanto a por qué mi fecha de inicio estaba siendo alterada al llamar endOfWeek() en la instancia de fecha original. Ahora lo entiendo.

    – Redtama

    22 de abril de 2021 a las 12:58

Avatar de usuario de Demian
demian

Esto le da el comienzo de la semana (lunes) hasta el final de la semana (domingo).

No tengo idea si esta es una configuración en el servidor. (Algunas personas ponen la semana inicial en domingo)

private $start;
private $end;

public function setWeekPeriod($weeknumber)
{
    $week_start = (new DateTime())->setISODate(date("Y"),$weeknumber)->format("Y-m-d H:i:s");

    $this->start = Carbon::createFromFormat("Y-m-d H:i:s", $week_start);
    $this->start->hour(0)->minute(0)->second(0);
    $this->end = $this->start->copy()->endOfWeek();
}

Avatar de usuario de Ahmad Reza Azimi
Ahmad Reza Azimi

Funcionó bien para mí.

$now = now();
$weekStartDate = $now->copy()->startOfWeek()->format('Y-m-d');
$weekEndDate = $now->copy()->endOfWeek()->format('Y-m-d');

¿Ha sido útil esta solución?