Equivalence de to_days () de mysql en php

Résolu
nader19 Messages postés 18 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 12 août 2008 - 9 juil. 2008 à 16:42
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 - 25 août 2009 à 21:26
Bonjour,
je cherche
equivalence fonction to_days de mysql en php

par exemple to_days('2008-01-01')
affiche 733407
je cherche equivalence de cette fonction en php

6 réponses

JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
10 juil. 2008 à 14:41
Petite amélioration :p

Fonctionne à partir de l'année 0200 ^^, et prend les formats Y/m/d et Y-m-d :p

function to_days($date)
{
    // Split() permet d'utiliser plusieurs formats de dates : Y/m/d, Y-m-d
    list($year, $month, $day)  = split('[-/.]', $date, 3);

    // Ce test " ? IF : ELSE; " est plus lent, mais on gagne du temps contre le implode(), if/else et nouvelles variables (minime, mais bon ^^)
    $date = ( is_leap_year($year) ? 2000 : 1999 ) . '-' . $month . '-' . $day;
   
    $leaps = 0; // Années bisextilles ...
    for($i = 0; $i < $year; $i++)
    {
        // Si c'est une année bisextille, on ajoute 1
        if( is_leap_year($i) )
        {
            ++$leaps;
        }
    }
   
    $days = date('z', strtotime($date));
    return $leaps + ($year * 365) + $days;
}

function is_leap_year($year)
{    if( ( $year % 100 0 && $year % 400 0 ) OR ( $year % 100 != 0 && $year % 4 == 0 ) )
    {
        return true;
    }
    return false;
}

<hr />Si ma reponse te convient, merci de l'accepter ! 
3
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
10 juil. 2008 à 13:24
Salut :p

J'ai essayé de coder quelque chose ... mais bon :s Ca marche pas vraiment ...

function to_days($date)
{
    $return = 0;
    // Si la date est correcte pour Php
    if( ( $date_time = strtotime($date) ) )
    {
        $return += date('z', $date_time) + 1;
        // + nombre de jours depuis le début de l'année
        // +1 car commence à zero

        $return += floor( date('Y', $date_time) * 365.25);
        // On ajoute le nombre de jours en fonction des années (+ bisextilles)
    }
    else
    {
        // Permet un calcul perpétuel
        list($years, $months, $days) = split('[-/.]', $date);

        $list_days_month = array(31, ( $years % 4 ? 28 : 29 ), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

        $return += $days;
        for( $i = 0 ; $i < $months - 1 ; $i++ )
        {
            $return += $list_days_month[$i];
        }
       
        $return += floor( $years * 365.25 );
    }
    return $return;
}

Ca me retourne :
* en orange : les dates invalides pour Php ( < 1970). MySQL retourne un resultat à partir de l'an 0200(-01-01) ...
Date |Nombre Jours MySQL |Nombre Jours PHP |Différence |----
0001-01-01, 730851, 366, 730485, ----
0200-01-01, 73049, 73051, -2, ----
0500-01-01, 182622, 182626, -4, ----
1000-01-02, 365244, 365252, -8, ----
1800-12-31, 657801, 657816, -15, ----
1970-01-01, 719528, 719543, -15, ----
1970-09-04, 719774, 719789, -15, ----
1970-10-16, 719816, 719831, -15, ----
1974-11-27, 721319, 721334, -15, ----
1984-12-26, 725001, 725017, -16, ----
1987-06-10, 725897, 725912, -15, ----
1988-04-17, 726209, 726225, -16, ----
1988-10-08, 726383, 726399, -16, ----
1990-11-11, 727147, 727162, -15, ----
1995-06-02, 728811, 728826, -15, ----
2000-01-18, 730502, 730518, -16, ----
2004-12-31, 732311, 732327, -16, ----
2008-05-15, 733542, 733558, -16, ----
2008-06-09, 733567, 733583, -16

Comme tu peux le voir, malgré le bon calcule ... il y a une différence de 14 à 16 (voir moins après une certaine date) jours :s

Aurais-je oublié quelque chose ???

Sinon, je ne connais pas d'équivalent à cette fonction. Il n'y en a pas non plus dans les fonctiosn date de Php
<hr />Si ma reponse te convient, merci de l'accepter ! 
0
nader19 Messages postés 18 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 12 août 2008
10 juil. 2008 à 13:48
merçi pour ta rponese mais j'ai fonction disons tu trouve pas en php mais ça donne meme résultat que to_days()
se sont des amis dans un forum anglais de php
voila la fonction
function to_days($date)
{
$bits = explode('-', $date, 2);
$year = $bits[0];
if(is_leap_year($year))
{
$bits[0] = '2000';
}
else{
$bits[0] = '1999';
}
$date = implode('-',$bits);
$leaps = 387; //leap years up to 1600
for($i = 1600; $i < $year; $i++)
{
if(is_leap_year($i))
{
++$leaps;
}
}
$days = date('z', strtotime($date));
return $leaps + ($year * 365) + $days + 1;
}

function is_leap_year($year)
{
if($year % 100 0 && $year % 400 0)
{
return true;
}
if($year % 100 == 0)
{
return false;
}
if($year % 4 == 0)
{
return true;
}
return false;
}
et la met n'importe quel date come 2008-01-01
et tu va voir
ça retourne 733407 en mysql et php
0
nader19 Messages postés 18 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 12 août 2008
10 juil. 2008 à 15:11
cool tes modificatiosn
merçi
ça aide beaucoup surtout si on importe des dates a partir des fichiers excel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tms1 Messages postés 1 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 25 août 2009
25 août 2009 à 10:38
si un server mysql est installé il suffit de faire une requete :

"SELECT TO_DAYS('".$date."');"
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
25 août 2009 à 21:26
Bonsoir,

Pour être vraiment indépendant des formats (ou absence de TO_DAYS() qui 'est pas du SQL standard), la classe DateTime fait ce que tu veux.
0
Rejoignez-nous