Accueil > Forum > > > > timestamp et dates : interrogation
timestamp et dates : interrogation
jeudi 28 septembre 2006 à 11:16:25 |
timestamp et dates : interrogation

malalam
|
Hello,
là, les gars, si quelqu'un a une explication, elle est la bienvenue :
<?php /** * function getDatesBetween * renvoie un tableau contenant toutes les dates, jour par jour, * comprises entre les deux dates passées en paramètre. * NB : les dates doivent être au format aaaa-mm-dd (mais on peut changer le parsing) * @param (string) $dStart : date de départ * @param (string) $dEnd : date de fin * @return (array) aDates : tableau des dates si succès * @return (bool) false : si échec */ function getDatesBetween ($dStart, $dEnd) { $iStart = strtotime ($dStart); $iEnd = strtotime ($dEnd); if (false === $iStart || false === $iEnd) { return false; } $aStart = explode ('-', $dStart); $aEnd = explode ('-', $dEnd); if (count ($aStart) !== 3 || count ($aEnd) !== 3) { return false; } if (false === checkdate ($aStart[1], $aStart[2], $aStart[0]) || false === checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) { return false; } for ($i = $iStart; $i < $iEnd + 86400; $i += 86400 ) { $sDateToArr = strftime ('%Y-%m-%d', $i); echo $i, ' => ', $sDateToArr, '<br />'; $sYear = substr ($sDateToArr, 0, 4); $sMonth = substr ($sDateToArr, 5, 2); $aDates[$sYear][$sMonth][] = $sDateToArr; } if (isset ($aDates) && !empty ($aDates)) { return $aDates; } else { return false; } } $aDates = getDatesBetween ('2006-09-01', '2006-10-31'); echo '<pre>', print_r ($aDates), '</pre>'; echo date ('Y-m-d', 1162159200), '<br />'; echo date ('Y-m-d', 1162072800), '<br />'; echo 1162159200 - 1162072800, '<br />'; echo strtotime ('20061029 00:00:00'), '<br />'; echo strtotime ('20061030 00:00:00'), '<br />'; echo 1162162800 - 1162072800; ?>
matez, dans l'affichage du tableau, la date du 29 octobre 2006. Puis analysez mes tests après le print_r ()... 24h correspondent à 86400 secondes. Entre le 29 octobre et le 30 octobre 2006, il y a 90000 secondes...why??? Décalage pour simuler quoi, au juste ?
Merci :-)
|
|
jeudi 28 septembre 2006 à 11:19:20 |
Re : timestamp et dates : interrogation

malalam
|
Réponse acceptée !
C'est bon j'ai pigé... : le changement d'heure...
|
|
jeudi 28 septembre 2006 à 11:48:25 |
Re : timestamp et dates : interrogation

malalam
|
Réponse acceptée !
Code corrigé :
<?php /** * function getDatesBetween * renvoie un tableau contenant toutes les dates, jour par jour, * comprises entre les deux dates passées en paramètre. * NB : les dates doivent être au format aaaa-mm-dd (mais on peut changer le parsing) * @param (string) $dStart : date de départ * @param (string) $dEnd : date de fin * @return (array) aDates : tableau des dates si succès * @return (bool) false : si échec */ function getDatesBetween ($dStart, $dEnd) { $iStart = strtotime ($dStart); $iEnd = strtotime ($dEnd); if (false === $iStart || false === $iEnd) { return false; } $aStart = explode ('-', $dStart); $aEnd = explode ('-', $dEnd); if (count ($aStart) !== 3 || count ($aEnd) !== 3) { return false; } if (false === checkdate ($aStart[1], $aStart[2], $aStart[0]) || false === checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) { return false; } for ($i = $iStart; $i < $iEnd + 86400; $i = strtotime ('+1 day', $i) ) { $sDateToArr = strftime ('%Y-%m-%d', $i); $sYear = substr ($sDateToArr, 0, 4); $sMonth = substr ($sDateToArr, 5, 2); $aDates[$sYear][$sMonth][] = $sDateToArr; } if (isset ($aDates) && !empty ($aDates)) { return $aDates; } else { return false; } } $aDates = getDatesBetween ('2006-09-01', '2006-10-31'); echo '<pre>', print_r ($aDates), '</pre>'; ?>
|
|
vendredi 29 septembre 2006 à 20:46:58 |
Re : timestamp et dates : interrogation

FhX
|
Félicitation :p
|
|
vendredi 29 septembre 2006 à 20:59:06 |
Re : timestamp et dates : interrogation

malalam
|
M'ci :-) Ca m'a donné des sueurs froides...j'utilise ce petit code en production moi, sur un outil extranet important! lol...pffiou...
|
|
vendredi 29 septembre 2006 à 21:30:46 |
Re : timestamp et dates : interrogation

FhX
|
Mais tu utilises toujours pas les exceptions au lieu de faire du "return false" sans arrêt ?
Pourtant, c'est beaucoup plus facile à gérer je trouve au niveau des erreurs... un si beau code PHP5 quand même :p
|
|
vendredi 29 septembre 2006 à 21:39:58 |
Re : timestamp et dates : interrogation

malalam
|
Pour être franc avec toi, je n'ai pas encore pleinement exploré les exceptions. Du coup, je ne suis pas super à l'aise avec. Et j'ai tellement l'habitude de gérer avec les false...lol. Tien...si t'as le temps, donne moi un exemple de ce que tu ferais à ce niveau avec ce code ?
|
|
vendredi 29 septembre 2006 à 21:53:24 |
Re : timestamp et dates : interrogation

FhX
|
En gardant la classe d'exception tel quel :
function getDatesBetween ($dStart, $dEnd) { $iStart = strtotime ($dStart); $iEnd = strtotime ($dEnd); if (false === $iStart || false === $iEnd) { throw new Exception('Erreur de création de timestamp pour $dStart ou $dEnd'); }
$aStart = explode ('-', $dStart); $aEnd = explode ('-', $dEnd); if (count ($aStart) !== 3 || count ($aEnd) !== 3) { throw new Exception('Erreur lors du décompte jj-mm-yyyy'); // même si je doute que tu ais besoin d'un contrôle ici :o } if (false === checkdate ($aStart[1], $aStart[2], $aStart[0]) || false === checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) { throw new Exception('Erreur lors de la vérification des dates de début et de fin'); } for ($i = $iStart; $i < $iEnd + 86400; $i = strtotime ('+1 day', $i) ) { $sDateToArr = strftime ('%Y-%m-%d', $i); $sYear = substr ($sDateToArr, 0, 4); $sMonth = substr ($sDateToArr, 5, 2); $aDates[$sYear][$sMonth][] = $sDateToArr; } if (isset ($aDates) && !empty ($aDates)) { return $aDates; } else { return false; } }
try { if ( false !== ($aDates = getDatesBetween ('2006-09-01', '2006-10-31') ) { echo '<pre>', print_r ($aDates), '</pre>'; } else { echo 'Aucune date possible entre les 2 dates séléctionnées'; } } catch ( Exception $e ) { // La on rentre dans le cas où le gars s'est planté dans une des dates que tu rentres en arguments de fonctions. echo $e->getMessage(); }
Comme ca, tu gères tes erreurs dans le catch(), et la bonne exécution de ton code dans le try(). Bon à savoir, try{}catch{} peut s'empiler. Ex : try { functionx(); try { functiony(); } catch ( Exception $e1 ) { die ($e1->getMessage()); } } catch ( Exception $e2 ) { die ($e2->getMessage()); }
Je trouve ca beaucoup plus puissant que de faire du "return false" à tout va. Mais tu peux par exemple éviter de voir les messages d'erreurs dans ta fonction. Suffit de dériver la classe d'exception :
class exc_extended extends exception {
public function __construct($code_err) { require_once('./fichier_avec_les_codes_et_les_msg_d'erreur.php'); parent::__construct($tableau[$code_err], $code_err); }
}
Ce qui donne dans tes fonctions : function x { if ( $x === null ) { throw new Exception(1); } }
try { x(); } catch ( Exception $e ) { die ( $e->getMessage() ); }
Et ca ira chercher le message d'erreur tout seul dans un fichier à part. Surtout si tu fais du multilangage, la gestion des exceptions peut se révéler très puissante par sa modularité :) Vala vala !
|
|
vendredi 29 septembre 2006 à 22:23:51 |
Re : timestamp et dates : interrogation

malalam
|
Je ne fais pas de multilangage sur notre extranet (pas encore...lol). Par contre, les erreurs et exceptions y sont gérés par ma classe de debugger (qui marche très bien d'ailleurs XD). Donc, c'est une très bonne idée! Même si y a jamais d'erreurs sur cette fonction vu que c'est moi qui l'utilise et que le code l'utilisant est bien fait ;-) Néanmoins, ton truc me permet effectivement de gérer les éventuelles erreurs de code qui ne créent pas d'erreurs internes PHP quelle qu'elle soit. Donc, je vais adopter!
Merci :-)
|
|
vendredi 29 septembre 2006 à 22:29:22 |
Re : timestamp et dates : interrogation

FhX
|
Tu peux aussi l'utiliser pour de la gestion de modules. Imagine un truc comme ca :
Je fais un système de news ainsi qu'un système de commentaires. Si la news est bonne, (disons que l'ID est existante en DB) on affiche les commentaires etc... J'ai 2 classes, une pour les news, l'autre les commentaires. Pour mettre tout ca en relation facilement, ca va donner quelque chose comme ca :
try { $n = new news($news_id); // etc... try { $c = new comments($news_id); // etc... } catch ( Exception $e1 ) { // Erreur, soit pas de commentaire, soit le module de commentaire est desactivé temporairement. } } catch ( Exception $e2 ) { // Soit l'id de news est invalide, soit tout le module de news est desactivé par l'admin.
}
Voila un autre exemple d'utilisation :)
|
|
Cette discussion est classée dans : dates, echo, return, false, adates
Répondre à ce message
Sujets en rapport avec ce message
tri des dates [ par rukiyes ]
bonjour,je doi faire un agenda, et pour l'instant dans ma page,j'ai la date d'aujourd'hui et la liste des dates que je recupère dans un champs d'une b
pb comparaison string [ par fmazoue ]
ca doit etre tout con mais la je vois pas l'erreur je doit etre bigleu !!!voila le bout de code : echo "comparaison entre ".$pwd." et ".$info[$i]["ntp
formulaire trop complexe pour moi ! sos [ par bg62 ]
bonjour, je me suis lancé dans l'élaboration d'un formulaire (en php mais avec aussi du javascript) et je rame complètement, malgré toutes les astuces
Aide pour ameliorer un code [ par audayls ]
Bonsoir,J'essaye en ce moment de faire un système EBS (un système qui "agit" comme un serveur MySQL).J'aimerai avoir vos avis pour l'amélioré (au nive
Doxygene et une class PHP [ par banbanfr ]
Bonjour à tous,Voilà je souhaite faire une doc technique via Doxygene d'ailleurs j'y arrive a peu prêt mais des notions me reste encore mystérieuses e
login password [ par isecso ]
je peut pas accéder au base pour verifier login et password des utilisateur et voici les fichiers .Merci d'avance.---------------------page Admin-----
formulaire [ par Nadmy ]
bjr les gars é ben g fé un code pour reservation demenagement , dont un formulaire a remplir é g mi une dans une div en bas une calendrier pour choisi
inscription des clients [ par samia22 ]
Bonjour a tous; j'ai un probleme lors d'inscription des clients ... ca na marche pas.. easyphp m'affiche: erreur dans la requete.. voici le code:
probleme de formulaire && BASE DE DONNée [ par joooooker ]
salut!!je ne peux pas trouver l'erreur ou? alors...fichier inscription Inscription function
connexion PDO [ par vargas ]
Bonjour je voudrais créer une classe connexion à ma bd MySql et une autre classe qui vas contenir toutes mes requêtes. Pour le le moment j'ai ça :
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|