<?php
$year=2014;
$month=1;
$day=26;
# Obtenemos el numero de la semana
$semana=date("W",mktime(0,0,0,$month,$day,$year));
# Obtenemos el día de la semana de la fecha dada
$diaSemana=date("w",mktime(0,0,0,$month,$day,$year));
# el 0 equivale al domingo...
if($diaSemana==0)
$diaSemana=7;
# A la fecha recibida, le restamos el dia de la semana y obtendremos el lunes
$primerDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+1,$year));
# A la fecha recibida, le sumamos el dia de la semana menos siete y obtendremos el domingo
$ultimoDia=date("d-m-Y",mktime(0,0,0,$month,$day+(7-$diaSemana),$year));
echo "<br>Semana: ".$semana." - año: ".$year;
echo "<br>Primer día ".$primerDia;
echo "<br>Ultimo día ".$ultimoDia;
?>
Comentarios sobre la versión: Versión 1 (10)
public function inicio_fin_semana($fecha){
$diaInicio="Monday";
$diaFin="Sunday";
$strFecha = strtotime($fecha);
$fechaInicio = date('Y-m-d',strtotime('last '.$diaInicio,$strFecha));
$fechaFin = date('Y-m-d',strtotime('next '.$diaFin,$strFecha));
if(date("l",$strFecha)==$diaInicio){
$fechaInicio= date("Y-m-d",$strFecha);
}
if(date("l",$strFecha)==$diaFin){
$fechaFin= date("Y-m-d",$strFecha);
}
return Array("fechaInicio"=>$fechaInicio,"fechaFin"=>$fechaFin);
}
$fecha = new DateTime('2017-05-01');
//$fecha = new DateTime();
$fecha->modify('first day of this month');
echo $fecha->format('d');
echo $fecha->format('m');
echo $fecha->format('Y');
echo "<br>";
echo "<br>";
$fecha->modify('last day of this month');
echo $fecha->format('d');
echo $fecha->format('m');
echo $fecha->format('Y');
$fecha = new DateTime('2017-09-14');
$numDiaActual = $fecha->format('w');
if ($numDiaActual > 0 && $numDiaActual < 6) {
if ($numDiaActual == 1) {
$fin = 5;
} else {
$fin = 5 - $numDiaActual;
}
//Primero le sumo los dias hasta llegar al viernes
$fecha->add(new DateInterval('P'.$fin.'D'));
var_dump($fecha->format('Y-m-d'));
//Solo le resto 4 dias
$fecha->sub(new DateInterval('P4D')); //
var_dump($fecha->format('Y-m-d'));
}
Tengo un problema y es que quiero traer unos resultados de 7 días atrás a partir de hoy 7, es un proyecto no puedo hablar de el, pero la dinámica es la siguiente:
Cinco repartidores de periódico riegan tres tipos de periódicos en la ciudad durante la semana.
No tengo idea de como colocar en orden (DOMINGO, LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SÁBADO) la cantidad de periódicos repartidos durante la semana. esto es reporte que debe hacerse diario, No se si me explique bien.
el siguiente codigo hace la consulta en la tabla pero no se como organizarla.
<?php
include 'conexion.php';
$sql = mysqli_query($conect, "SELECT * FROM tabla WHERE fecha
BETWEEN CURRENT_DATE()-7 AND CURRENT_DATE() ORDER by fecha DESC");
echo '<table border="2">
<tr>
<th>Id</th>
<th>Nombre</th>
<th>Fecha</th>
<th>Periodico1</th>
<th>Periodico2</th>
<th>Periodico 3</th>
</tr>';
while ($row = mysqli_fetch_array($sql)) {
echo'<tr>
<td>'.$row ['id'].'</td>
<td>'.$row ['nombre'].'</td>
<td>'.$row ['fecha'].'</td>
<td>'.$row ['periodico1'].'</td>
<td>'.$row ['periodico2'].'</td>
<td>'.$row ['periodico3'].'</td>
</tr>';}'
</table>';
?>
function dias_semana($value){
#Fecha actual
$year=date("Y");
$month=date("m");
$day=date("d");
# Obtenemos el numero de la semana
$semana=date("W",mktime(0,0,0,$month,$day,$year));
# Obtenemos el día de la semana de la fecha dada
$diaSemana=date("w",mktime(0,0,0,$month,$day,$year));
# el 0 equivale al domingo...
if($diaSemana==0)
$diaSemana=7;
# A la fecha recibida, le restamos el dia de la semana y obtendremos el lunes
$primerDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+1,$year));
#Dias que siguen
$segundoDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+2,$year));
$tercerDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+3,$year));
$cuartoDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+4,$year));
$quintoDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+5,$year));
$sextoDia=date("d-m-Y",mktime(0,0,0,$month,$day-$diaSemana+5,$year));
# A la fecha recibida, le sumamos el dia de la semana menos siete y obtendremos el domingo
$ultimoDia=date("d-m-Y",mktime(0,0,0,$month,$day+(7-$diaSemana),$year));
#Devolvemos fecha según valores dados
if ($value == lunes) {
return $primerDia;
}elseif ($value == martes) {
return $segundoDia;
}elseif ($value == miercoles) {
return $tercerDia;
}elseif ($value == jueves) {
return $cuartoDia;
}elseif ($value == viernes) {
return $quintoDia;
}elseif ($value == sabado) {
return $sextoDia;
}elseif ($value == domingo) {
return $ultimoDia;
}else{
return '00-00-0000';
}
}
#Mostramos los dias
echo 'Lunes ' . dias_semana(lunes) . '</br>';
echo 'Martes ' . dias_semana(martes) . '</br>';
echo 'Miercoles ' . dias_semana(miercoles) . '</br>';
echo 'Jueves ' . dias_semana(jueves) . '</br>';
echo 'Viernes ' . dias_semana(viernes) . '</br>';
echo 'Sabado ' . dias_semana(sabado) . '</br>';
echo 'Domingo ' . dias_semana(domingo) . '</br>';
#En caso de valor incorrecto
echo 'Error: ' . dias_semana(error) . '</br>';