begin process at 2012 05 31 10:35:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

timestamp et dates : interrogation


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

timestamp et dates : interrogation

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

malalam

Administrateur CodeS-SourceS

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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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 :


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales