scripts pour la gestion des dates

WRInaute accro
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:
 
WRInaute accro
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 ? :?
 
WRInaute impliqué
Ouep
en voilà une qui fait bien son boulot
Code:
/*
    $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;
}
 
WRInaute accro
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
 
WRInaute accro
thierry8 a dit:
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:
$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
 
WRInaute accro
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é)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut