Fonction tzdelata en panne

RenardB Messages postés 4 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 26 mars 2010 - 26 mars 2010 à 11:20
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 26 mars 2010 à 18:59
Bonjour a tous

j'ai pas l'habitude d'appeler a l'aide mais la je suis perdu sur le temps.
pour mon site je récupère une variable (ici :2010-25-03 17:26:08) de temps que je mettais a l'heure local dans la bdd grâce a la function tzdelta
cela a très bien fonctionner jusqu'à la. mais je me suis rendu compte en début de semaine que ce n'étais plus le cas et je n'arrive pas a trouver d'explication. j'ai beau chercher dans les différents manuel et sur google je ne sais pas comment faire soit pour corriger ou pour la remplacer.

merci de votre aide car je vois que le temps est un problème en programmation et tout ce que je trouve ne correspond pas a la simplicité de ma requête

Cordialement

<?php

//setlocale(LC_ALL, 'fr_FR'); d'origine
setlocale(LC_TIME, "fr_FR");

// Calcul la différence entre un Temps UTC et le temps locale
function tzdelta ( $iTime = 0 ) {
       if ( 0 $iTime ) { $iTime time(); }
       $ar = localtime ( $iTime );
       $ar[5] += 1900; $ar[4]++;
       $iTztime = gmmktime ( $ar[2], $ar[1], $ar[0], $ar[4], $ar[3], $ar[5], 0);
       return ( $iTztime - $iTime );
} 


$locale_time = date('Y-m-d H:i:s', (strtotime("2010-25-03 17:26:08") + tzdelta("2010-25-03 17:26:08")));
?>
<? echo $locale_time; ?> // affiche 1970-01-01 02:00:00 au lieu de 2010-25-03 18:26:08 ? depuis 1 mois je pense

3 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 mars 2010 à 11:58
Salut,

localtime() attend un timestamp, or tu lui passe une chaîne de caractère. Forcément, ça aime pas. Au passage, visiblement ta chaine n'est pas un format valide pour strtotime et à mon avis il serai plus aisé de refaire ta fonction en utilisant strptime(). Sinon, définir son fuseau horaire à l'aide de date_default_timezone_set() au autre n'est pas une option.
0
RenardB Messages postés 4 Date d'inscription mercredi 21 octobre 2009 Statut Membre Dernière intervention 26 mars 2010
26 mars 2010 à 13:15
salut

merci de ta réponse
la fonction as été mis en place par mon programmeur mais il est indisponible et je doit me débrouiller sans lui pour l'instant et cotés php et c'est pas mon fort.

la variable $local_time utilisé est celle ci :
$locale_time = date('Y-m-d H:i:s', (strtotime($_REQUEST['lr_timestamp']) + tzdelta($_REQUEST['lr_timestamp'])));


lr_timestamp étant le temps reçus en retour a la confirmation de paiements par le service utilisé mais vu son emplacement et vu que mes client son plutôt français et belge cela me fait un décalage de temps dans la bdd

d'un autres cotés je me disait pourquoi je ferais pas plus simple et récupéré le temps local pour le mettre dans la base au moments de la confirmation de paiements ?

$locale_time = date('Y-m-d H:i:s');


ca serais pas plus simple ? si mon programmeur la fait que pour ce service de paiements c'est qu'il devais posée un problème de date et time ?

j'avoue que je patauge un peu
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 mars 2010 à 18:59
Salut,

Si tu veux encore plus simple, lors de ta requête SQL tu peux utiliser NOW() pour indiquer la date et l'heure. Soit dit en passant, se baser sur des données fournies par l'utilisateur... c'est limite, il peux mettre ce qu'il veut.
0
Rejoignez-nous