No es necesario convertir a marca de tiempo para hacer la comparación, ya que las cadenas se validan como las fechas en formato canónico 'AAAA-MM-DD'.
Esta prueba va a funcionar:
(($date_from_user >= $start_date) && ($date_from_user <= $end_date))
dadas:
$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';
NOTA: La comparación de cadenas como éste sí permite "no válido", por ejemplo, las fechas (32 de diciembre) '2009-13-32' y para cadenas extrañamente formateadas '2009/3/3', de modo que una comparación de cadenas NO será equivalente a una comparación de fecha o marca de tiempo. Esto funciona SÓLO si los valores de fecha en las cadenas están en un formato CONSISTENT y CANONICAL.
EDIT para agregar una nota aquí, explicando lo obvio.
Por CONSISTENTE, me refiero, por ejemplo, que las cadenas se comparan deben estar en formato idéntico: el mes debe ser siempre dos caracteres, el día debe ser siempre dos caracteres, y el carácter separador debe ser siempre un guión. No podemos comparar confiablemente "cadenas" que no sean de cuatro caracteres anuales, dos caracteres mensuales, dos caracteres diarios. Si tuviéramos una combinación de un carácter y dos meses de carácter en las cuerdas, por ejemplo, obtendríamos resultados inesperados cuando comparamos, '2009-9-30'
con '2009-10-11'
. Humanamente vemos "9" como menos de "10", pero una comparación de cadenas verá '2009-9'
como mayor que '2009-1'
. No necesariamente necesitamos tener un separador de guiones; podríamos comparar cadenas de manera confiable en el formato 'YYYYMMDD'
; si hay un carácter separador, tiene que estar siempre allí y ser siempre el mismo.
Por CANÓNICA, quiero decir que un formato que dará lugar a cadenas que se ordenarán por orden de fecha. Es decir, la cadena tendrá una representación de "año" primero, luego "mes", luego "día". No podemos comparar cadenas confiablemente en el formato 'MM-DD-YYYY'
, porque eso no es canónico.Una comparación de cadenas compararía el MM
(mes) antes de comparar YYYY
(año) ya que la comparación de cadenas funciona de izquierda a derecha.) Una gran ventaja del formato de cadena 'YYYY-MM-DD' es que es canónico; las fechas representadas en este formato se pueden comparar confiablemente como cadenas.
[ANEXO]
Si tienes que ir por la conversión de marca de tiempo php, ser conscientes de las limitaciones.
En algunas plataformas, php no admite valores de marca de tiempo anteriores a 1970-01-01 y posteriores a 2038-01-19. (Esa es la naturaleza del entero de 32 bits de la marca de tiempo Unix.) Se supone que las versiones posteriores pf php (5.3?) Abordan eso.
La zona horaria también puede ser un problema, si no tiene cuidado de utilizar la misma zona horaria al convertir de cadena a marca de tiempo y de marca de hora a cadena.
HTH
Sería de gran ayuda, entonces tendría acceso a las funciones de manipulación de la fecha existen. – ChrisF
Solo tenga en cuenta la limitación de la marca de tiempo ya que las marcas de tiempo Unix comienzan en la época, que es el 1 de enero de 1970 (1970-01-01), por lo que podría tener un comportamiento extraño para las fechas de prueba antes de 1970. –
@Shadi Usted sabe que existe Números NEGATIVOS, ¿verdad? –