Obtener el primer día de la semana en PHP

Efectivamente hay algoritmos mejores, y un lector comentó de una función de PHP que pareciera hacer exactamente lo mismo que mi algorimo, pero obviamente es mas simple.

strtotime (”last Monday”);

Me encontré con esta simple necesidad el día de hoy. Como conseguir el primer día de la semana considerando que esta comienza el Lunes. Por ejemplo, hoy es Domingo 16, entonces mi función debía retornar Lunes 10 por ser este el lunes de la semana en que esta el domingo. (no necesariamente el lunes más cercano, de hecho está mas cerca el lunes 17, pero considerando que la semana comienza en lunes, este ya es de la semana siguiente)

Tal vez este lleno de lugares en internet con algoritmos mejores o iguales al mio, pero como no fue el primer resultado en una búsqueda en google, amerita hacer un pequeño post con la función.

El funcionamiento es básicamente, determinar que día de la semana es el que nos pasaron, y restarle al timestamp tantos días como nos hayamos pasado del lunes.

O sea, si nos dan una fecha que es miércoles, restarle a esa fecha dos días. Si es Lunes, no restarle nada, y si es domingo, restarle 6 días.

function getFirstDayOfWeek($date) {
    $getdate = getdate($date);

    // How many days ahead monday are we?
    switch ( $getdate['wday'] ) {
        case 0: // we are on sunday
            $days = 6;
            break;

        default: // any other day
            $days = $getdate['wday']-1;
            break;
    }

    $seconds = $days*24*60*60;
    $monday = date($getdate[0])-$seconds;

    return $monday;
}

Esta función trabaja muy bien para mis necesidades, pero si alguien necesita considerar el domingo como primer día de la semana, se puede simplificar y quedaría de la siguiente manera:

function getFirstDayOfWeek($date) {
    $getdate = getdate($date);

    // substact as many days as days ahead sunday we are
    $seconds = $getdate['wday']*24*60*60;
    $sunday = date($getdate[0])-$seconds;

    return $sunday;
}

Espero a alguien le sea de utilidad.


10 Responses to “Obtener el primer día de la semana en PHP”

  1. Perfecto!

    Es justamente lo que necesitaba! Gracias.

  2. amigo….que formato de fecha debo ingresar a la funcion para que me entrege un resultado????

    saludos

  3. que pasaria se el lunes esta en otro mes….es jueves 1, y el lunes es lunes 27….

    saludos

  4. La función espera una fecha en el formato normal de php, o sea un timestamp que podes obtener con funciones como mktime.

    Con respecto a tu pregunta, si el lunes esta en otro mes, retorna correctamente el lunes del mes anterior. (o eso espero)

    Espero te sea util !

  5. Joya, es lo justo lo q necesitaba.. si bien no es complicado de hacer, no por eso tiene menos valor!… me has ahorrado tiempo y se agradece enormemente!!

    Saludos.

  6. Ehmm…perdón…pero lo siguiente…

    …no es lo mismo?? 😉

  7. sorry no salio el bloque de codigo, me referia a

    strtotime (“last Monday”);

  8. La verdad que creo que tienes toda la razón. Siempre hay una manera mas fácil, igualmente en su momento ha sido una buena práctica.

  9. Justo lo que estaba buscando.

    Gracias,

  10. Exelente la funsion

    strtotime (“last Monday”);

    Muestra numero del domingo anterior
    date(‘j’, strtotime(“last Monday”));

    Muestra el numero del día (en este caso 0)
    date(‘w’, strtotime(“last Monday”));

Discussion Area - Leave a Comment