Discussion:
Problème avec les dates
(trop ancien pour répondre)
Yannick VOYEAUD
2013-10-26 21:49:50 UTC
Permalink
Bonsoir

Je ne comprend RIEN!
Nous sommes bien le samedi 26 octobre 2013
le script suivant est correct 26/10/2013
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y');

Par contre ce qui suit me renvoie la date de demain!
dimanche 27 octobre 2013
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));

Ce nouvel élément renvoie aussi une valeur correcte
dimanche 26 octobre 1913
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);

Il s'agit d'un seul fichier

Pourquoi le second élément est-il incorrect?

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Denis Beauregard
2013-10-27 23:22:21 UTC
Permalink
Le Sat, 26 Oct 2013 23:49:50 +0200, Yannick VOYEAUD
Post by Yannick VOYEAUD
Bonsoir
Je ne comprend RIEN!
Nous sommes bien le samedi 26 octobre 2013
le script suivant est correct 26/10/2013
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y');
Par contre ce qui suit me renvoie la date de demain!
dimanche 27 octobre 2013
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
Ce nouvel élément renvoie aussi une valeur correcte
dimanche 26 octobre 1913
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);
Il s'agit d'un seul fichier
Pourquoi le second élément est-il incorrect?
Pourrait-il s'agir tout bêtement d'une histoire de fuseau horaire ?
Est-ce que l'heure est bonne ?


Denis
Yannick VOYEAUD
2013-10-28 02:45:38 UTC
Permalink
Post by Denis Beauregard
Le Sat, 26 Oct 2013 23:49:50 +0200, Yannick VOYEAUD
Post by Yannick VOYEAUD
Bonsoir
Je ne comprend RIEN!
Nous sommes bien le samedi 26 octobre 2013
le script suivant est correct 26/10/2013
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y');
Par contre ce qui suit me renvoie la date de demain!
dimanche 27 octobre 2013
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
Ce nouvel élément renvoie aussi une valeur correcte
dimanche 26 octobre 1913
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);
Il s'agit d'un seul fichier
Pourquoi le second élément est-il incorrect?
Pourrait-il s'agir tout bêtement d'une histoire de fuseau horaire ?
Est-ce que l'heure est bonne ?
Bonjour Denis,

Oui j'ai regardé de ce coté là mais c'est bon et l'affichage horaire est
OK aussi

Une erreur de fuseau horaire (donc de jours aurait été décelé avant sur
la machine)
Le changement de jours s'est bien effectué à 00:00 et le passage à
l'heure d'hiver s'est fait aussi correctement

Amitiés
Post by Denis Beauregard
Denis
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Olivier Miakinen
2013-10-30 22:22:59 UTC
Permalink
Bonjour,
Post by Yannick VOYEAUD
Je ne comprend RIEN!
Nous sommes bien le samedi 26 octobre 2013
le script suivant est correct 26/10/2013
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y');
Par contre ce qui suit me renvoie la date de demain!
dimanche 27 octobre 2013
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
Les deux fonctions (mktime et strftime) utilisent-elles la même
référence de temps, je veux dire toutes les deux l'heure UTC ou
toutes les deux l'heure locale ? Si ce n'est pas le cas, et si
ton programme n'est censé fonctionner qu'en France métropolitaine
ou pas loin, tu peux essayer de faire les calculs de temps à midi
plutôt qu'à minuit, mais ce n'est qu'une bidouille.

Ah, en lisant la doc je vois qu'il existe une fonction gmstrftime,
peut-être te sera-t-elle utile si mktime fonctionne en heure UTC
et strftime en heure locale.

Cordialement,
--
Olivier Miakinen
Yannick VOYEAUD
2013-10-31 15:28:09 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Yannick VOYEAUD
Je ne comprend RIEN!
Nous sommes bien le samedi 26 octobre 2013
le script suivant est correct 26/10/2013
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y');
Par contre ce qui suit me renvoie la date de demain!
dimanche 27 octobre 2013
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
Les deux fonctions (mktime et strftime) utilisent-elles la même
référence de temps, je veux dire toutes les deux l'heure UTC ou
toutes les deux l'heure locale ? Si ce n'est pas le cas, et si
ton programme n'est censé fonctionner qu'en France métropolitaine
ou pas loin, tu peux essayer de faire les calculs de temps à midi
plutôt qu'à minuit, mais ce n'est qu'une bidouille.
Bonjour Olivier,

Le setlocale est présent en début de fichier et juste avant les deux
commandes *time
Post by Olivier Miakinen
Ah, en lisant la doc je vois qu'il existe une fonction gmstrftime,
peut-être te sera-t-elle utile si mktime fonctionne en heure UTC
et strftime en heure locale.
Je vais regarder ta suggestion et la tester.

Pour info les tests ont été faits directement sur le site de production
donc je trouve que cela craint si la base de temps n'est pas la même. Je
vais donc poser la question à l'hébergeur.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Olivier Miakinen
2013-10-31 16:23:33 UTC
Permalink
Post by Yannick VOYEAUD
Post by Olivier Miakinen
Post by Yannick VOYEAUD
[...]
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
Les deux fonctions (mktime et strftime) utilisent-elles la même
référence de temps, je veux dire toutes les deux l'heure UTC ou
toutes les deux l'heure locale ? Si ce n'est pas le cas, et si
ton programme n'est censé fonctionner qu'en France métropolitaine
ou pas loin, tu peux essayer de faire les calculs de temps à midi
plutôt qu'à minuit, mais ce n'est qu'une bidouille.
Le setlocale est présent en début de fichier et juste avant les deux
commandes *time
Ce n'était pas ma question, mais peu importe. En fait, je n'arrive
pas à trouver dans la doc de mktime la possibilité de lui passer une
*chaîne de caractères* contenant dans l'ordre le jour, puis le mois,
puis l'année.

Dans la doc, on voit que ce sont des entiers, d'abord l'heure, les
minutes et les secondes, puis le mois (avant le jour), puis le jour,
et enfin l'année.

Donc, par exemple :
echo strftime("%A %e %B %Y", 12, 0, 0,
mktime(date('n'))
mktime(date('j'))
mktime(date('Y'))
);

Où as-tu vu une utilisation autre de mktime ?
Olivier Miakinen
2013-10-31 16:33:33 UTC
Permalink
Post by Yannick VOYEAUD
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
[...] En fait, je n'arrive
pas à trouver dans la doc de mktime la possibilité de lui passer une
*chaîne de caractères* contenant dans l'ordre le jour, puis le mois,
puis l'année.
Alors voilà, c'est tout simple en fait.

La fonction date('d\/m\/Y') retourne une chaîne de caractères commençant
par le nombre 31 puisque nous sommes le 31 du mois. La fonction mktime
reçoit un seul paramètre qui est censé être l'heure, les autres étant
inchangés par rapport à l'heure courante. Donc, si tu appelles cette
fonction à 17:23:33 le 31/10/2013, c'est comme si tu lui demandais de
formater l'heure 31:23:33 le 31/10/2013, soit 07:23:33 le 01/11/2013
(eh oui, 31 h, c'est 24 h + 7 h, donc 7 h du matin le lendemain).

Conclusion : si tu ne comprends pas ce qui se passe, RTFM !

Cordialement,
--
Olivier Miakinen
Yannick VOYEAUD
2013-10-31 17:51:57 UTC
Permalink
Post by Olivier Miakinen
Post by Yannick VOYEAUD
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
[...] En fait, je n'arrive
pas à trouver dans la doc de mktime la possibilité de lui passer une
*chaîne de caractères* contenant dans l'ordre le jour, puis le mois,
puis l'année.
Alors voilà, c'est tout simple en fait.
La fonction date('d\/m\/Y') retourne une chaîne de caractères commençant
par le nombre 31 puisque nous sommes le 31 du mois. La fonction mktime
reçoit un seul paramètre qui est censé être l'heure, les autres étant
inchangés par rapport à l'heure courante. Donc, si tu appelles cette
fonction à 17:23:33 le 31/10/2013, c'est comme si tu lui demandais de
formater l'heure 31:23:33 le 31/10/2013, soit 07:23:33 le 01/11/2013
(eh oui, 31 h, c'est 24 h + 7 h, donc 7 h du matin le lendemain).
Conclusion : si tu ne comprends pas ce qui se passe, RTFM !
Cordialement,
Bonsoir,

Encore une fois Olivier je dois te dire MERCI!!!!!!!!!!!!!!!!!!
Tu m'as donné la piste qu'il fallait suivre.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Continuer la lecture sur narkive:
Loading...