Timestamp en format date SQL -> PHP

Fermé
Pyrophoenix - 3 oct. 2008 à 12:34
 Rollin'babe !! - 8 oct. 2008 à 23:25
Bonjour,

J'ai un problem avec un cron.php

J'essaye de mettre un: $message = str_replace('{AC_EXP_DATE}', $cs['due_date'], $message);

Quand AC_EXP_DATE est demandé due_date apparait mais en format timestamp sur les mails...Que dois-je faire pour qu'il apparait en format dd-mm-aaaa?

Merci en avance!
A voir également:

16 réponses

Rollin'babe !!
4 oct. 2008 à 12:09
Bjour,

A tu essayé ceci :

$message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message);

Notes :

- string date ( string $format [, int $timestamp ] ) pour le formatage d'une date à partir d'un Timestamp en supposant que ton $cs['due_date'] est bien un INT.
- $AC_EXP_DATE = date("j/ n/ Y") --> c'est la date du jour et le format est curieux d'après mes sources.

Sources : https://www.php.net/manual/fr/function.date.php

Salutations.
1
Rollin'babe !!
8 oct. 2008 à 23:25
Re,


"Ce qui est amusant c'est que ça fait 3 semaines que je l'essaye et il a envoyé la deuxième vague 2 semaines après la première...Donc la j'vois pas trop ou est la logique..."


Ce qui est sur et logique c'est que si ton programme continue d'envoyer des mails, ce n'est surement pas dans cette
section de code mon cher car cette section ne s'exécutera jamais telle que tu l'a écrite pour
les raisons logiques évoquées plus haut.

Identifie la bonne section de code qui envoie tes mails ou tout ton code PHP dans le pire des cas
et nous reverrons tout ca tranquillement (;>)....

_____________________________________________________________________________________

Ça ne sert donc à rien de bidouiller ad vitam Aeternam et perdre notre temps précieux ton
$message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message)
dans cette section et le problème se situe à un autre endroit.

Dans tous les cas je suis sur que
$message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message) est la bonne solution sous ces conditions :

1- {AC_EXP_DATE} est bien identifiée dans $message.
2- $cs['due_date'] est bien un INT, n'est pas à NULL et à bien le format valide d'un Timestamp.

Dans les autres cas - Date() peut renvoyer n'importe quoi mon cher.
_____________________________________________________________________________________

Je suis sur que tu va faire preuve de jugeote cette fois mon ami... avec tout le respect que je te dois bien sur....

Cordialement.
1
Merci pour ta réponse...Mais je crois que je me gourre quelque part

J'ai mis

$message = str_replace('{AC_EXP_DATE}', $cs['due_date'], $message);
$AC_EXP_DATE = date("j/ n/ Y");

Je n'ai pas réussi à optenir de date :[
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 oct. 2008 à 19:21
ne faudrait-il pas inverser ?

$AC_EXP_DATE = date("j/ n/ Y");
$message = str_replace('{AC_EXP_DATE}', $cs['due_date'], $message);


-1
Merci pour la réponse mais il ne veut toujours pas changer en date :S...Un peu frustrant tout ça
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 oct. 2008 à 12:10
et comme ça:

$AC_EXP_DATE = date("j/ n/ Y",$cs['due_date']);

$message = str_replace($cs['due_date'],'{AC_EXP_DATE}', $message);
-1
Rollin'babe !! > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
4 oct. 2008 à 12:25
Bjour,

Quand AC_EXP_DATE est demandé due_date apparait mais en format timestamp sur les mails...Que dois-je faire pour qu'il apparait en format dd-mm-aaaa?"

Ses besoins :

- L'utilisateur donne AC_EXP_DATE.
- On remplace AC_EXP_DATE par cs['due_date'] au format dd-mm-aaaa.

Votre solution :

1- $AC_EXP_DATE = date("j/ n/ Y",$cs['due_date']);
2- $message = str_replace($cs['due_date'],'{AC_EXP_DATE}', $message);

Littéralement :

1- Je formate cs['due_date'] au format dd-mm-aaaa --> $AC_EXP_DATE (on écrase donc la date fournie par le User).
2- Je remplace tout cs['due_date'] trouvé dans $message par $AC_EXP_DATE.

Curieux....

Je propose plutôt ceci en suivant votre logique :

$AC_EXP_TMP = date("j, n, Y",$cs['due_date']);
$message = str_replace('{AC_EXP_DATE}',$AC_EXP_TMP, $message);

Bonne journée.
0

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

Posez votre question
Merci à tous pour votre réponse.

J'ai tout essayé mais ce que j'ai à la fin est simplement 1,01,1970 donc le debut de la date Unix et non du AC_EXP_DATE

Une autre idée?
0
Rollin'babe !!
6 oct. 2008 à 20:26
Re,

Peux tu nous donner ce que tu a réellement codé pour obtenir la date système ?.

Normalement ceci devrait marcher pourtant si $cs['due_date']) a bien le format d'un Timestamp...

$message = str_replace('{AC_EXP_DATE}', date("j, n, Y",$cs['due_date']), $message);

https://www.php.net/manual/fr/function.date.php


A+.
0
}else if( (date("m") == 1 ) || (date("m") == 15) ) {
echo "CC Expired ... ";
$ecArray = getEmailContent(6); // $ecArray[ ]

$to = $cs['email'];
$from = $fromemail; // by config
$message = $ecArray['ec_content'];
$subject = $ecArray['ec_subject'];
$message = str_replace('{TITLE}', $cs['title'], $message);
$message = str_replace('{NAME}', $cs['name'], $message); // site URL ?
$message = str_replace('{SITE_URL}', SITE_URL, $message); // site URL ?
$message = str_replace('{AC_EXP_DATE}', date("j, m, Y", $cs['due_date']), $message); // site URL ?
// todo all variable ..
// echo $to, $from, $subject, $message;
// exit;
send_mail($to, $from, $subject, $message); // ....
}else {
echo "CC Expired but no notification to be sent today. - Daily cron {$cs['email']} <br /> ";
}
}
0
Re,

Je reprends ton code :

"
1- }else if( (date("m") == 1 ) || (date("m") == 15) ) {
2- echo "CC Expired ... ";
3- $ecArray = getEmailContent(6); // $ecArray[ ]
4- $to = $cs['email'];
5- $from = $fromemail; // by config
6- $message = $ecArray['ec_content'];
7- $subject = $ecArray['ec_subject'];
8- $message = str_replace('{TITLE}', $cs['title'], $message);
9- $message = str_replace('{NAME}', $cs['name'], $message); // site URL ?
10- $message = str_replace('{SITE_URL}', SITE_URL, $message); // site URL ?
11- $message = str_replace('{AC_EXP_DATE}', date("j, m, Y", $cs['due_date']), $message); // site URL ?
// todo all variable ..
// echo $to, $from, $subject, $message;
// exit;
12- send_mail($to, $from, $subject, $message); // ....
13- }else {
14- echo "CC Expired but no notification to be sent today. - Daily cron {$cs['email']} <br /> ";
15- }}
"


------------------->

1- }else if( (date("m") == 1 ) || (date("m") == 12) ) {

11- $message = str_replace('{AC_EXP_DATE}', date("j, m, Y", $cs['due_date']), $message); // site URL ?

-->AC_EXP_DATE semble bien identifiée dans $message puisque tu obtiens un 01-01-1970 après le str_replace et la conversion timestamp est correcte alors vérifie déjà que $cs[due_date] est bien un INT (sinon la fct date() renvoie peut être n'importe quoi) et affiche le avant d'effectuer le str_replace pour vérifier qu'il n'est pas à vide.


Mais...quuoooiii...????

---------------->

1- }else if( (date("m") == 1 ) || (date("m") == 12) ) {

--> il ne rentrera jamais dans cette portion de ton code et tu ne testes absolument pas cette section puisque nous ne sommes ni en janvier - ni en décembre mais en OCTROBRE !!... en effet date("m") renvoie le mois courant de la date interne ou tu lances ton programme !!! ...

--> redonne moi le code avant tout cette portion que tu nous a envoyé stp - c'est avant que se situe ton problème.
--> teste quand même cette section de code en modifiant temporairement la ligne 1- par ceci :

1- }else if( (date("m") == 10) ) { <----- moi d'octobre - c'est à dire ce mois ci - tu comprends ???.

A+.
0
Oups...

Plutôt ca :

11- $message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message); // site URL ?

Relis ca : https://www.php.net/manual/fr/function.date.php ....pour bien comprendre la fonction date().

A+.
0
$message = str_replace('{AC_EXP_DATE}', date("j, m, Y", $cs['due_date']), $message);

Pour avoir l'explication du AC_EXP_DATE et tout ça

Quand j'écris le mail je met {AC_EXP_DATE} qui va être remplacé par le champ 'due date' dans ma base de donnée MYSQL que lui est en timestamp

Mon problème est que si je ne mets rien

$message = str_replace('{AC_EXP_DATE}', $cs['due_date'], $message);

Il remplace AC_EXP_DATE par 1223375985 et pas par 07/10/2008

Si je met ça:

$message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message);

Ca me donne le 01/01/1970 Donc il converti quelque chose mais avant d'avoir reçu le code en lui même de la base de donnée à convertir

Ce que j'ai avant est:

echo "Cron started --<br /><br />";
$fs = mysql_query("select * from tbl_customer where status = 1 ") or die ("Mysql Error: ".mysql_error());
while( $cs = mysql_fetch_array($fs) ) {

et à la fin:

}else {
echo "Expired but no notification to be sent today. - Daily cron {$cs['email']} <br /> ";
}
}




echo "<br />";
}
echo "<br />Cron ended.";
?>
0
moi je voudrais savoir a koi va te servir ton timestand il y a dautre fonction en php pour emetre une date en faite

jai trouve cette article la


Le timestamp PHP

Vous allez sûrement vous demander de quoi il s'agit, et c'est normal ;) Un timestamp est un nombre qui indique le nombre de secondes qui se sont écoulées depuis le premier janvier 1970. Vous allez me dire jusque-là, "mais à quoi ça sert" ? patience, on y arrive :)

Le premier janvier 1970 à minuit, le timestamp valait 0. Il tient maintenant sur 10 chiffres, c'est dire si le nombre de secondes qui se sont écoulées depuis est important !

Pour afficher le timestamp de la seconde actuelle, on utilise la fonction time() de PHP. Voici un exemple :
<?php
echo time(); //Affiche le nombre de secondes écoulées depuis le 1er janvier 1970
?>

Par défaut, la fonction date ne demande qu'un seul paramètre comme nous l'avons vu plus haut, cela permet d'afficher par exemple le jour actuel ou encore la minute et la seconde courantes. Nous pouvons par contre, et là cela devient intéressant, afficher toutes ces informations pour un timestamp donné. La fonction date telle que nous l'avons vue correspond à ceci :
<?php
echo date('Y', time());
?>

Si nous indiquons un timestamp différent, PHP va nous retourner tout ce que vous voulez pour le timestamp donné et non pour le temps courant. Imaginez ceci :
<?php
$timestamp = time() - 3600;
echo date('j', $timestamp);
?>

PHP va vous retourner ici le jour qu'il était il y a une heure ! en effet, on utilise ici le timestamp $timestamp qui correspond au timestamp actuel (obtenu via la fonction time() auquel on a retranché 3600 secondes, soit une heure) !

Vous comprenez maintenant qu'il va être possible d'effectuer des choses très puissantes avec le timestamp de PHP. Vous venez d'apprendre comment convertir un timestamp en date avec la fonction date(), nous allons maintenant voir comment convertir une date en timestamp, vous allez voir ce n'est pas compliqué !
Conversions d'une date vers un timestamp

PHP permet de convertir une date vers un timestamp. Pour ce faire, on utilise la fonction mktime(). Elle va vous permettre à partir du jour, de l'heure, etc ... d'une date classique, d'obtenir le timestamp correspondant. Ce timestamp pourra être ensuite stocké ou encore subir des traitements. Voici la syntaxe de base de la fonction mktime() :
<?php
$timestamp = mktime(heures, minutes, secondes, mois, jour, année);
?>

Si vous voulez obtenir le timestamp du 3 janvier 1988 à 2h31 et 10 secondes, vous pouvez mettre ceci :
<?php
echo mktime(2, 31, 10, 1, 3, 1988);
0
Rollin'babe !!
7 oct. 2008 à 23:42
Salut dadou,

Hors de tout considération de savoir si un timestamp c'est bien ou pas etc....

Revoici son code avec une ou deux petites corrections et nottament celle indiqué en gras (voir historique).

1-

Pyrophoenix nous dit qu'il peux tester tout ce qui est aprés le "if( (date("m") == 1 ) || (date("m") == 15) )" c'est à dire que ce IF est vrai à ce jour et qu'on entre dans toute la section.
Au niveau de ce IF - Il n'ya rien qui te choque toi ???.... (on est en octobre...).

2-

$cd['due_date'] est un champ récupéré aprés son ordre SQL SELECT (voir historique).

Pyrophoenix nous dit que date("j, n, Y", $cs['due_date']) renvoie la date système 01-01-1970 - je lui ai dit que c'est surement parce que $cd['due_date'] n'est pas au format INT comme l'exige la fonction date() ou que $cd['due_date'] est peut etre vide.

Qu'en pense tu ?..

A++.
____________________________________________________________________________

"
else
if( (date("m") == 1 ) || (date("m") == 15) )
{
echo "CC Expired ... ";
$ecArray = getEmailContent(6); // $ecArray[ ]

$to = $cs['email'];
$from = $fromemail; // by config
$message = $ecArray['ec_content'];
$subject = $ecArray['ec_subject'];
$message = str_replace('{TITLE}', $cs['title'], $message);
$message = str_replace('{NAME}', $cs['name'], $message); // site URL ?
$message = str_replace('{SITE_URL}', SITE_URL, $message); // site URL ?
$message = str_replace('{AC_EXP_DATE}', date("j, n, Y", $cs['due_date']), $message); // site URL ?
// todo all variable ..
// echo $to, $from, $subject, $message;
// exit;
send_mail($to, $from, $subject, $message); // ....
}else {
echo "CC Expired but no notification to be sent today. - Daily cron {$cs['email']} <br /> ";
}
}"
0
dadou9101 Messages postés 107 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 12 août 2010 5
8 oct. 2008 à 10:01
Franchement je bloque un peu la je vais réfléchir et vous donner une réponse rapidement
mais se que je trouve bisarre ce pourquoi mettre 15 dans if( (date("m") == 1 ) || (date("m") == 15) )
-1
Pour le 1-15 je veux que le mail soit envoyé chaque 2 semaines si je n'ai pas de réponse du client le mail doit etre envoyé chaque 15 jours

Voili ^^
0
Rollin'babe !!
8 oct. 2008 à 20:58
(hé hé),

"if( (date("m") == 1 ) || (date("m") == 15) )"

D'après ce lien : https://www.php.net/manual/fr/function.date.php qui est quand même une référence pour de ce langage pourri qu'est le PHP :

--> string date ( string $format [, int $timestamp ] )

"Retourne une date sous forme d'une chaîne, au format donné par le paramètre format , fournie par le paramètre timestamp ou la date et l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, le paramètre timestamp est optionnel et vaut par défaut la valeur de la fonction time()."

Caractères pour le paramètre format ------> Description -----------------------> Exemple de valeurs retournées
m -----------------------------------> Mois au format numérique, avec zéros initiaux 01 à 12


1-

Date() renvoie un STRING - donc if( (date("m") == 1 ) || (date("m") == 15) ) ne sera jamais vérifiée...


2-

Oublions ce problème de String et continuons ta logique...

--> Ton test veut dire littéralement : si nous sommes au moins de Janvier ou si nous sommes le 15ème mois de l'année (.....) alors j'envoie mon mail.....bah tu l'enverra pas souvent ton message avec ton code...

Date ("m") te renverra toujours une valeur comprise entre "01" et "12".
Date("m") à ce jour pour le mois d'octobre = "10"... OK ?.

--> if( (date("m") == 1 ) || (date("m") == 15) )
--> Condition non vérifiée au mois d'octobre car Date("m") = "10".

Donc tu ne peux entrer dans cette section car la condition n'est pas vérifiée.

_________________________________________________________________________

"Pour le 1-15 je veux que le mail soit envoyé chaque 2 semaines si je n'ai pas de réponse du client le mail doit être envoyé chaque 15 jours"

--> if( (date("d") == "01" ) || (date("d") == "15") )
--> Le mail sera envoyé chaque 1er et 15 du mois.

Mais faudra que tu patientes le 15 prochain pour tester ton code (:>)....

Amusant non ???..

Bon courage (:>).
0
Ce qui est amusant c'est que ça fait 3 semaines que je l'essaye et il a envoyé la deuxième vague 2 semaines après la première...Donc la j'vois pas trop ou est la logique...

Mais la n'est pas la question.

Je n'ai toujours pas pu transformer ma requete en format timestamp vers format date...
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
3 oct. 2008 à 12:52
Salut,

Utilise la fonction date en mettant en argument ton formatage de sortie de date et ton timestamp.
-1