note 106959 deleted from function.date by tularis
| From: | tularis@php.net | Date: | Thu, 22 Dec 2011 20:41:12 +0000 |
| Subject: | note 106959 deleted from function.date by tularis | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-185221@lists.php.net to get a copy of this message | ||
Note Submitter: z666zz666z at terra dot es
Reason: non-english
----
Rod, gran trabajo escribiendo la función.
Sólo déjame puntualizar dos cosas, la primera es acerca de los acentos de Miércoles y
Sábado, no aparecen.
La otra cosa es que creo que hay una manera mucho más simple y más sencilla de leer, usando un
array y sin olvidarse de que date("w") devuelve false cuando la fecha no es válida.
Aquà la pongo:
<?php
if(False===($dia=date("w")){ // La fecha no era válida
$dia_texto="Error";
}else{ // El dÃa de la semana es: 0 (Domingo) y de 1 (Lunes) a 6 (Sábado)
$DiasSemana=array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");
$dia_texto=$DiasSemana[$dia];
unset($DiasSemana);
}
echo "El dia de la semana es $dia <br>";
echo "El dia de la semana es $dia_texto";
unset($dia_texto,$dia);
?>
Explicación para quien no lo sepa algunas cosas usadas:
El operador de asignación = no sólo asigna el valor sino que también lo devuelve... por
ello la expresión ($dia=date("w")) devuelve un valor, el mismo que se almacena en
$dia... que puede ser False o un número de 0 a 6, porque es lo que devuelve date("w").
Asà mismo se pueden hacer asignaciones múltiples en cadena de un mismo valor:
$VariableA=($VariableB=($VariableC=$Valor)); // Por claridad he puesto paréntesis, para que se
vea explÃcitamente el orden de asignación, todas toman el mismo valor.
Luego hacemos la comparación no sólo del valor sino también del tipo de dato... booleano o
entero... con (False===(...)), con eso sabemos si date("w") devolvió exáctamente
False y no otra cosa que se pueda evaluar como false tal y como podrÃa ser un cero.
El === es justo lo que hace, comparar que ambos sean del mismo tipo y en ese caso que tengan el
mismo valor.
Si hiciéramos (False==0) darÃa True porque cero se evalua como False y False es igual a False
Pero (False===0) da False porque no son del mismo tipo, booleano no es el mismo tipo que entero.
Luego está el truco de tener los dÃas de la semana en un array cuyo primer Ãndice es cero,
más concretamente los ponemos en el orden que date("w") usa.
Para obtener el dÃa de la semana en texto simplemente accedemos a la posición indicada por
date("w") en ese array.
Esto sirve para por ejemplo tener múltiples arrays, para diversos idiomas.
Lo mismo se puede usar para los meses, etc...
Por ejemplo multiidioma:
<?php
if(False===($dia=date("w")){ // La fecha no era válida
$dia_texto="Error";
}else{ // El dÃa de la semana es: 0 (Domingo) y de 1 (Lunes) a 6 (Sábado)
$DiasSemana=array(
'ENG'=>array("Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"),
'ESN'=>array("Domingo", "Lunes", "Martes",
"Miércoles", "Jueves", "Viernes", "Sábado"),
'minis'=>array(
'ENG'=>array('S','M','T','W','T','F','S'),
'ESP'=>array('D','L','M','M','J','V','S'),
)
);
$dia_texto_Español=$DiasSemana['ESP'][$dia];
$dia_texto_Ingles=$DiasSemana['ENG'][$dia];
$dia_texto_Abrebiatura_Español=$DiasSemana['minis']['ESP'][$dia];
$dia_texto_Abrebiatura_Ingles=$DiasSemana['minis']['ENG'][$dia];
unset($DiasSemana);
}
unset($DiasSemana);
?>
Los arrays dan muchÃsimo juego.