note 106959 added to function.date

From: Date: Wed, 21 Dec 2011 09:48:35 +0000
Subject: note 106959 added to function.date
Groups: php.notes 
Request: Send a blank email to php-notes+get-185189@lists.php.net to get a copy of this message
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. ---- Server IP: 80.64.47.13 Probable Submitter: 83.42.126.86 ---- Manual Page -- http://www.php.net/manual/en/function.date.php Edit -- https://master.php.net/note/edit/106959 Del: integrated -- https://master.php.net/note/delete/106959/integrated Del: useless -- https://master.php.net/note/delete/106959/useless Del: bad code -- https://master.php.net/note/delete/106959/bad+code Del: spam -- https://master.php.net/note/delete/106959/spam Del: non-english -- https://master.php.net/note/delete/106959/non-english Del: in docs -- https://master.php.net/note/delete/106959/in+docs Del: other reasons-- https://master.php.net/note/delete/106959 Reject -- https://master.php.net/note/reject/106959 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#185189) next »