Non è necessario convertire al timestamp per fare il confronto, dato che le stringhe sono convalidati come le date in formato canonico 'AAAA-MM-DD'.
Questo test funziona:
(($date_from_user >= $start_date) && ($date_from_user <= $end_date))
dato:
$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';
NOTA: Confrontando le stringhe come questo non permettono di "non valida" Date per esempio (32 dicembre) '2009-13-32' e per le stringhe formattate stranamente '2009/3/3', in modo tale che un confronto tra stringhe NON sia equivalente a un confronto di data o marca temporale. Funziona SOLO se i valori di data nelle stringhe sono in un formato CONSISTENT e CANONICAL.
EDIT aggiungere una nota qui, elaborando sull'ovvio.
Con COERENTE, voglio dire per esempio che le stringhe confrontate devono essere in formato identico: il mese deve essere sempre due personaggi, il giorno deve essere sempre due personaggi, e il carattere separatore deve essere sempre un trattino. Non possiamo confrontare in modo affidabile le "stringhe" che non sono quattro caratteri anno, due caratteri mese, due caratteri giorno. Se avessimo un mix di un carattere e due caratteri nelle stringhe, ad esempio, otterremmo un risultato inaspettato quando abbiamo confrontato, '2009-9-30'
a '2009-10-11'
. Vediamo umanamente "9" come inferiore a "10", ma un confronto tra stringhe vedrà '2009-9'
come maggiore di '2009-1'
. Non è necessario necessariamente disporre di caratteri separatori di trattini; potremmo comparare in modo altrettanto affidabile le stringhe nel formato 'YYYYMMDD'
; se c'è un carattere separatore, deve essere sempre presente e sempre uguale.
Per CANONICAL, intendo che un formato che risulterà in stringhe che verranno ordinate in ordine di data. Cioè, la stringa avrà prima una rappresentazione di "anno", quindi "mese", quindi "giorno". Non possiamo confrontare in modo affidabile le stringhe nel formato 'MM-DD-YYYY'
, perché non è canonico.Un confronto di stringhe confrontava lo MM
(mese) prima di confrontare lo YYYY
(anno) dal momento che il confronto tra stringhe funziona da sinistra a destra.) Un grande vantaggio del formato di stringa 'YYYY-MM-DD' è che è canonico; le date rappresentate in questo formato possono essere confrontate in modo affidabile come stringhe.
[ADDENDUM]
Se andate per la conversione timestamp php, essere consapevole dei limiti.
Su alcune piattaforme, php non supporta i valori di data e ora precedenti al 1970-01-01 e/o successivi al 2038-01-19. (Questa è la natura del timestamp di Unix intero a 32 bit.) Le versioni successive di pf php (5.3?) Dovrebbero occuparsene.
Il fuso orario può anche essere un problema, se non si presta attenzione all'utilizzo dello stesso fuso orario durante la conversione da stringa a data/ora e da data/ora a stringa.
HTH
Sarebbe utile, allora si avrebbe accesso a tutte le funzioni di manipolazione di data ci sono. – ChrisF
Semplicemente con la limitazione del timestamp dato che i timestamp di Unix iniziano all'epoca, che è il 1 gennaio 1970 (1970-01-01), quindi potresti avere un comportamento divertente per verificare le date prima del 1970. –
@Shadi Sai che esiste qualcosa Numeri negativi, giusto? –