scripts pour la gestion des dates

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

scripts pour la gestion des dates

Message le Jeu Oct 26, 2006 21:42

salut !

connaissez vous / conseillez vous / déconseiller vous des scripts pour la gestion de dates ?

(comparaison de dates, soustraction de dates, soustraction d'année, de mois, de jours, etc..)


je n'en connais aucun et avant de m'aventurer dans la jungle que me proposera google je fais appel à votre expérience et vos connaissance.

merci :wink:


finstreet
WRInaute accro
WRInaute accro
 
Messages: 16999
Inscription: 10 Juil 2005

Message le Jeu Oct 26, 2006 23:04

j'ai pas totu compris en fait... pour les dates avec php y'a pas vraiment de pb

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 7:03

en fait en php, il n'existe aucune fonction permettant de faire une comparaison entre deux dates, par exemple, ou de soustraire une date à une autre simplement, ou encore pour un dernier exemple, ajouter/déduire un certain temps donnée qui peut être en ANNEE, MOIS, JOUR, MINUTE, etc.. à une date.

c'est plus clair ? :?


nickargall
WRInaute accro
WRInaute accro
 
Messages: 6339
Inscription: 13 Juin 2005

Message le Ven Oct 27, 2006 9:43

$date1-$date2

Bon ok je :arrow:


narayana
WRInaute impliqué
WRInaute impliqué
 
Messages: 835
Inscription: 28 Jan 2005

Message le Ven Oct 27, 2006 9:46

Ouep
en voilà une qui fait bien son boulot
Code: Tout sélectionner
/*
    $interval can be:
    yyyy - Number of full years
    q - Number of full quarters
    m - Number of full months
    y - Difference between day numbers
      (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".)
    d - Number of full days
    w - Number of full weekdays
    ww - Number of full weeks
    h - Number of full hours
    n - Number of full minutes
    s - Number of full seconds (default)
*/
function datediff($interval, $datefrom, $dateto, $using_timestamps = false)
{

  if (!$using_timestamps) {
    $datefrom = strtotime($datefrom, 0);
    $dateto = strtotime($dateto, 0);
  }
  $difference = $dateto - $datefrom; // Difference in seconds

  switch($interval) {

    case 'yyyy': // Number of full years

      $years_difference = floor($difference / 31536000);
      if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
        $years_difference--;
      }
      if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
        $years_difference++;
      }
      $datediff = $years_difference;
      break;

    case "q": // Number of full quarters

      $quarters_difference = floor($difference / 8035200);
      while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
        $months_difference++;
      }
      $quarters_difference--;
      $datediff = $quarters_difference;
      break;

    case "m": // Number of full months

      $months_difference = floor($difference / 2678400);
      while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
        $months_difference++;
      }
      $months_difference--;
      $datediff = $months_difference;
      break;

    case 'y': // Difference between day numbers

      $datediff = date("z", $dateto) - date("z", $datefrom);
      break;

    case "d": // Number of full days

      $datediff = floor($difference / 86400);
      break;

    case "w": // Number of full weekdays

      $days_difference = floor($difference / 86400);
      $weeks_difference = floor($days_difference / 7); // Complete weeks
      $first_day = date("w", $datefrom);
      $days_remainder = floor($days_difference % 7);
      $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
      if ($odd_days > 7) { // Sunday
        $days_remainder--;
      }
      if ($odd_days > 6) { // Saturday
        $days_remainder--;
      }
      $datediff = ($weeks_difference * 5) + $days_remainder;
      break;

    case "ww": // Number of full weeks

      $datediff = floor($difference / 604800);
      break;

    case "h": // Number of full hours

      $datediff = floor($difference / 3600);
      break;

    case "n": // Number of full minutes

      $datediff = floor($difference / 60);
      break;

    default: // Number of full seconds (default)

      $datediff = $difference;
      break;
  }

  return $datediff;
}

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 11:16

merci narayana, je vais plancher dessus tout à l'heure


narayana
WRInaute impliqué
WRInaute impliqué
 
Messages: 835
Inscription: 28 Jan 2005

Message le Ven Oct 27, 2006 11:40

Pas de quoi si tu en as besoin d'autres, j'en ai une trifouillée :D

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 13:04

waouh! je ne dis pas non. ( je galère un peu avec ces dates :x )


une question : quel est la façon la plus facile de gérer le fuseau horaire ?
parce qu'il existe plusieurs solutions, dont celle auxquels je pense :

- changer le fuseau horaire par défaut en fonction de l'internaute et ces paramètre si connu avec la fonction : date_default_timezone_set()
=> ça semble le plus simple, mais je ne sais pas si les date d'une base de données seront automatique convertie en fonction du fuseau horaire, peut être que quelqu'un peu me donner la réponse

sinon pour chaque date afficher prendre le fuseau horaire de l'internaute et soustraire ou ajouter à chaque fois le temps de différence..

c'est un truc de fou quand même


narayana
WRInaute impliqué
WRInaute impliqué
 
Messages: 835
Inscription: 28 Jan 2005

Message le Ven Oct 27, 2006 13:58

Désolé pour les fuseaux horaires je n'ai pas de connaissances


finstreet
WRInaute accro
WRInaute accro
 
Messages: 16999
Inscription: 10 Juil 2005

Message le Ven Oct 27, 2006 15:21

thierry8 a écrit:en fait en php, il n'existe aucune fonction permettant de faire une comparaison entre deux dates, par exemple, ou de soustraire une date à une autre simplement, ou encore pour un dernier exemple, ajouter/déduire un certain temps donnée qui peut être en ANNEE, MOIS, JOUR, MINUTE, etc.. à une date.

c'est plus clair ? :?


euh... ben si... tu peux soustraire une date à une autre et encore plus facilement rajouter ou déduire un nombre à une date... je vois pas où est le pb meme

Code: Tout sélectionner
$timestamp = time()-300; // Maintenant - 5 mns
$comparaisonDate = date ('Y-m-d H:i:s', $timestamp); // transforme le timestamp en date


Ca te donne la date du jour - 5 minutes

C'est un exemple parmi d'autres

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Oct 27, 2006 15:44

arf ! oui, j'ai oublié de préciser que s'il existait une solution sans attaquer le timestamp ça serait le top. (en fait je cherche de ce coté)


siddhy
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 20 Sep 2004

Message le Lun Oct 30, 2006 13:56

Salut,
Et du coté de mysql? Il y a pas de fonctions qui font du bon boulot au niveau des calculs de date... (bien sûr ça entraine une connexion à la base mais c'est quand même très pratique)
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: franckM et 0 invités