2010-06-27 9 views
1

Je dois essayer de savoir si un horodatage unix est entre 21 jours et 49 jours à compter de la date actuelle. Quelqu'un peut-il m'aider à résoudre ce problème? Merci!Différence de temps entre les horodatages unix

+0

Entre 21 et 49 jours à compter de la date du jour dans quelle direction? Passé ou futur? –

+0

Désolé, j'ai oublié de mentionner ce détail crucial! dans le passé – pauld78

Répondre

5

Bienvenue à SO!
Cela devrait le faire:

if (($timestamp > time() + 1814400) && ($timestamp < time() + 4233600)) { 
// date is between 21 and 49 days in the FUTURE 
} 

Cela peut être simplifiée, mais je pensais que vous vouliez voir un exemple plus bavard :)

Je reçois 1814400 de 21*24*60*60 et 4233600 de 41*24*60*60.

Modifier: J'ai supposé futures dates. Notez également time() renvoie secondes (par opposition aux millisecondes) depuis l'Epoch en PHP.

Voici comment vous le faites dans le passé (depuis que vous avez modifié votre question):

if (($timestamp > time() - 4233600) && ($timestamp < time() - 1814400)) { 
// date is between 21 and 49 days in the PAST 
} 
+0

Merci David, parfait! Il est entre 21 et 49 jours dans le passé, donc je vais juste modifier votre extrait – pauld78

+0

Oui, je l'ai corrigé aussi: p –

+0

Sachez que certains jours sont plus courts/plus de 24 heures en raison de l'heure d'été, etc. calculs tremblants. J'évite généralement de faire des calculs sur des horodatages bruts comme ça et j'utilise à la place des fonctions intégrées pour les manipulations de date. –

3

La classe est DateTime PHP5 très adapté à ce genre de tâches.

$current = new DateTime(); 
$comparator = new DateTime($unixTimestamp); 
$boundary1 = new DateTime(); 
$boundary2 = new DateTime(); 

$boundary1->modify('-49 day'); // 49 days in the past 
$boundary2->modify('-21 day'); // 21 days in the past 

if ($comparator > $boundary1 && $comparator < $boundary2) { 
    // given timestamp is between 49 and 21 days from now 
} 
+0

Objet overkill> _ < –

3

strtotime est très utile dans ces situations, car vous pouvez presque parler anglais naturel.

$ts; // timestamp to check 
$d21 = strtotime('-21 days'); 
$d49 = strtotime('-49 days'); 

if ($d21 > $ts && $ts > $d49) { 
    echo "Your timestamp ", $ts, " is between 21 and 49 days from now."; 
} 
+1

Alors que dans cet exemple il peut être trivial, la fonction time() dans PHP 5.2.13 source est une ligne de code C alors que la fonction strtotime() est d'environ 55 lignes et appelle BEAUCOUP d'externes. Si cela a été utilisé dans une boucle en particulier, time() serait le chemin à parcourir. – TomWilsonFL

+0

C'est vrai. Mais si vous avez seulement besoin de définir un horodatage une fois, ce n'est pas trop cher quand vous considérez la lisibilité accrue. –

+0

+1 Pour utiliser les fonctions intégrées qui prennent en compte les problèmes de date liés aux paramètres régionaux. –

Questions connexes