note 53710 added to ref.datetime
| From: | WiChO at osu1 dot php dot net | Date: | Thu, 09 Jun 2005 23:39:00 +0000 |
| Subject: | note 53710 added to ref.datetime | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-90201@lists.php.net to get a copy of this message | ||
Esta funcion devuelve un arreglo de todas las semanas del año, especificando, dia inicio y dia
final, asi como el mes.
Espero que les sea de utilidad
(Solo la probe para el 2004 y 2005, un año bisiesto y otro no bisiesto)
<?php
function getWeeks($anioActual)
{
$t = mktime(0,0,0,1,1,$anioActual); //marca de tiempo de año actual
$fecha = getdate($t); //informacion sobre la fecha del primer dia del año
$semanas = array();
$semInfo = array();
$curMon = 1;
$curDay = 1;
$curYear = $anioActual;
$primerDia = mktime (0,0,0,$curMon,1,$anioActual); //primer dia del año actual
$maxdias = date('t',mktime (0,0,0,12,1,($anioActual-1))); //numero de dias, diciembre
año anterior
//en caso de que el año no empieze en domingo
if ($fecha['wday']!=0)
{ //primera semana empieza en domingo año anterior
$curDay = $maxdias - ($fecha['wday']-1);
$curMon = 12;
$curYear = $anioActual-1;
}
while (!$lastWeek)
{
$semInfo['id'] = $curDay; //primer dia de la semana
$maxdias = date('t',mktime (0,0,0,$curMon,1,$curYear)); //numero de dias del mes
presente
for ($i=1;$i<7;$i++)
{
$curDay++; //incremento el dia actual, hasta llegar a sabado
if ($curDay>$maxdias) //si el mes no termina en sabado
{
if ($curMon == 12) //verifico si este mes es diciembre, empiezo en enero del año siguiente
{
$curYear++;
$curMon = 1;
}else
{ $curMon++; } //sino, solo sigo con el otro mes
$curDay=1; //primer dia del mes
}
}
$semInfo['ld'] = $curDay; //ultimo dia de la semana
$curDay++; //me paso a la otra semana
if ($curDay>$maxdias) //verifico siempre si, me toca cambiar de año o mes
{
if ($curMon == 12) //verifico si este mes es diciembre, empiezo en enero del año siguiente
{
$curYear++;
$curMon = 1;
}else
{ $curMon++; } //sino, solo sigo con el otro mes
$curDay=1; //primer dia del mes
}
$semInfo['mon'] = $curMon; //mes para esta semana
$semanas[]=$semInfo; //agrego esta semana al arreglo
$semInfo = array();
if ($curYear>$anioActual) //si el año que estoy es mayor que el año actual, obtuve todas las
semanas
$lastWeek=true;
}
return $semanas; //devuelvo el arrego de semanas
}
?>
Pueden acceder al arreglo asi:
(muestra todas las semanas de este año)
<?php
$semanas = getWeeks(2005);
$k = 1;
foreach ($semanas as $semInfo)
{
echo "Semana: ".$k." Dia Inicio :".$semInfo['id']." Dia Final
:".$semInfo['ld']." Mes
:".$semInfo['mon']."<BR>\n";
$k++;
}
?>
----
Manual Page -- http://www.php.net/manual/en/ref.datetime.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+53710
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+53710&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+53710&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+53710&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+53710&report=yes&reason=useless
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+53710&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+53710&report=yes
Search -- http://master.php.net/manage/user-notes.php