Manejo de fechas con php

Publicado el 12. ene, 2010 by jbomba in PHP

El manejo de las fechas en php a veces suele ser un poco tedioso cuande deseas obtener el rango de dias dado una semana a veces es hasta mas complejo, aqui te presento un pequeño script que realize cuando necesitaba encontrar el dia de inicio y el dia final de dicha semana, espero les pueda servir, cualquier comentario o sugerencia es bien recibido

class ManageDate
{
  private $timestamp  = '';
  public $number_week = '';
  public $month		= '';
  public $year 		= '';
  public $format 		= 'Y-m-d';
  private $dias      = array('Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo');
  public function __construct(){

	if(empty($this->year))
		$this->year = date('Y');

	if(empty($this->number_week))
		$this->number_week = date('W');		

	if(empty($this->month))
		$this->month = date('m');
  }

  public function DayStartWeek(){
	$this->timestamp  = strtotime('+' . $this->number_week . ' weeks', strtotime($this->year . '0101'));
	$date_m = strtotime('-' . date('w', $this->timestamp) + 1 . ' days', $this->timestamp);
	return date($this->format, $date_m);
  }

  public function DayEndWeek(){
	return date($this->format, strtotime('+6 days', strtotime( $this->DayStartWeek() )));
  }

  public function LastDayMonth(){
	$last =  strftime("%d", mktime(0, 0, 0, $this->month+1, 0, $this->year));
	$lastday = $last.'-'.$this->month.'-'.$this->year;
	return date($this->format, strtotime($lastday));
  }
  public function RestarDias($num, $day){
	return date($this->format, strtotime("-{$num} days", strtotime( $day )));
  }

  public function SumarDias($num, $day){
	return date($this->format, strtotime("+{$num} days", strtotime( $day )));
  }
 public function getDiaWeek($day=''){
      $val = ($day=='') ? date($this->format) : $day;
      $bool = date('N',strtotime($val));
      return $this->dias[$bool-1];
 }

}

Obtener el dia y fin de esta semana

//Inicializamos
$date   	= new ManageDate();
//Obtenemos el dia que inicia esta semana
$day_start 	= $date->DayStartWeek();
//Obtenemos el dia que finaliza esta semana
$day_end   	= $date->DayEndWeek();
//Obtenemos el ultimo dia de este mes

Obtener el inicio y fin de la semana siguiente

//Inicializamos
$date   	= new ManageDate();
//Seteamos el valor de number_week a la semana siguiente
$date->number_week 	= date('W')+1;
//Obtenemos el dia que inicia la semana siguiente
$day_start 	= $date->DayStartWeek();
//Obtenemos el dia que finaliza la semana siguiente

Sumar dias a la fecha dada

//Inicializamos
$date   	= new ManageDate();
//Obtenemos el dia que inicia la semana
$day_start 	= $date->DayStartWeek();
//le agregamos 3 dias a la fecha en que inicia la semana
$dia_inicial_mas_3_dias = $date->SumarDias(3,$day_start);

Restar dias a la fecha dada

//Inicializamos
$date   	= new ManageDate();
//Obtenemos el dia que inicia la semana
$day_start 	= $date->DayStartWeek();
//le restamos 3 dias a la fecha en que inicia la semana
$dia_inicial_menos_3_dias = $date->RestarDias(3,$day_start);

El ultimo dia del mes

//Inicializamos
$date   	= new ManageDate();
//Seteamos el formato en que devuelve nuestras fechas
$date->format 	= 'd M Y';
//Seteamos el valor del año a 1982
$date->year 	= 1982;
//Seteamos el valor del mes a febrero - 02
$date->month 	= 02;
//ultimo dia de febro de 1982 es 28 Feb 1982
$ultimo_dia_febrero_1982 	= $date->LastDayMonth();

Dia de semana en q cayo la fecha

//Inicializamos
$date   	= new ManageDate();
//el 23-5-1982 cayo Domingo
$dia_semana = $date->getDiaWeek('23-05-1982');
//si se omite el parametro se toma el dia de hoy
$hoy_es     = $date->getDiaWeek();

Obviamente este script se puede mejorar e ir añadiendole metodos al manejo de fechas pero por el momento eso fue lo que necesite para realizar mi trabajo, espero les sirva de ayuda

Descarga:

Tags: , , , , , ,

2 Responses to “Manejo de fechas con php”

  1. Daniel Florez

    30. abr, 2010

    Hey gracias el script esta exelente y me sirvio demasiado
    para mi aplicacion muchas horas navegando hasta q encontre lo que necesitaba gracias

    Reply to this comment
    • jmoran

      03. may, 2010

      Gracias Hermano por tu comentario, me alegro que te alla servido :)

Leave a Reply