Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2011, 16h32   #1
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
Par défaut La fonction mktime et données en string

Bonjour à tous,

Je me trouve face à une colle. Je dois convertir une date et une heure en unix time.
Je m'explique, dans le formulaire que j'ai mis en place, je demande au visiteur de saisir une date au format JJ/MM/AAAA dans un input, et de saisir une heure au format hh:mm.

Alors, voici le code que j'ai mis en place :
Code PHP :
1
2
3
4
5
6
7
8
$datevisite = (!empty ($_POST['datevisite'])) ? strip_tags($_POST['datevisite']) : null;
$heurevisite = (!empty ($_POST['heurevisite'])) ? strip_tags($_POST['heurevisite']) : null;
/* création de la date en Unix Time */
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
$datecomplete = date('d-m-Y H:i:s', strtotime($datevisite.' '.$heurevisite));
$debutvisite  = mktime(date('H', strtotime($datevisite.' '.$heurevisite)), date('i', strtotime($datevisite.' '.$heurevisite)), date('s', strtotime($datevisite.' '.$heurevisite)), date('m', strtotime($datevisite.' '.$heurevisite)), date('d', strtotime($datevisite.' '.$heurevisite)), date('Y', strtotime($datevisite.' '.$heurevisite)));
$limitconfirm = mktime(date('H', strtotime($datevisite.' '.$heurevisite)), date('i', strtotime($datevisite.' '.$heurevisite)), date('s', strtotime($datevisite.' '.$heurevisite)), date('m', strtotime($datevisite.' '.$heurevisite))-15, date('d', strtotime($datevisite.' '.$heurevisite)), date('Y', strtotime($datevisite.' '.$heurevisite)));

J'ai également vérifier au niveau des strip_tags, mais cela ne change rien en les retirants.

Malheureusement, ça ne marche pas, il me sort des zéro tout le temps.

Par avant, je voulais procéder comme ceci :

Code PHP :
$limitconfirm = mktime($heure, $minute, '00', intval($mois), intval($jour)-15, intval($annee));

Mais j'obtenais un message d'erreur me signalant que le premier paramètre de la fonction mktime devait être de type long, ce qui ne m'arrange pas, car en lisant la doc sur mktime, il exige les dates et les heures avec les 0 initiaux.

Quelqu'un aurait-il une solution à me proposer permettant de récupérer les unix time correctement, car moi, je sèche (une fois de plus, eh oui).

En vous remerciant tous pour l'aide que vous pourrez m'apporter, je vous souhaite de passer une bonne après midi.
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h46   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu t'es emmêlé dans tes variables
Code :
$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite));
Sinon, il n'y pas d'histoire de zeros initiaux :
Code :
$limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h47   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

que donne ceci ?

Code php :
1
2
3
4
5
6
7
 
$datevisite = (!empty ($_POST['datevisite'])) ? strip_tags($_POST['datevisite']) : null;
$heurevisite = (!empty ($_POST['heurevisite'])) ? strip_tags($_POST['heurevisite']) : null;
$date_heure = trim(strtotime($datevisite.' '.$heurevisite));
 
$datecomplete = date('d-m-Y H:i:s', $date_heure);
...

EDIT: oui j'avais pas vu ton format, Sabotage a raison. Par contre défini une variable $date_heure afin d'optimiser un peu ton script
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h30   #4
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
Je viens de tester la solution de sabotage, et j'ai donc le code suivant :

Code PHP :
1
2
3
4
5
6
7
/* création de la date en Unix Time */
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
//$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite)); // j'en ai plus besoin
 
$debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
$limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));

Malheureusement, je n'obtiens pas le bon unix time me semble-t-il. J'obtiens ceci :

1305324000

En en allant sur le site suivant il me dit que le unix time correspond à :

Fri, 13 May 2011 22:00:00 GMT

Alors que dans mon formulaire, j'ai encodé le 14/05/2011 et 14:30 et que d'après le site mentionné ci-dessus, il devrais donc me sortir :

1305383400

Il me manque donc 59600, soit 16 h 30 minutes. Alors, la question que je me pose, est-ce que je dois dire que pour aujourd'hui j'ai assez souffert, ou est ce que je continue jusqu'à trouver LA solution à tout mes problèmes ?

Une fois de plus, je vous remercie pour votre aide.
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h35   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
sous unix t'as strptime, sinon ça le fait aussi avec strtotime
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h49   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Citation:
Envoyé par richard_sraing Voir le message

En en allant sur le site suivant il me dit que le unix time correspond à :

Fri, 13 May 2011 22:00:00 GMT

La valeur de ce timestamp est '2011-05-14 00:00:00';
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h57   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Chez moi c'est bon :
Code :
1
2
3
4
5
6
$datevisite = '14/05/2011';
$heuredebut = '14:30';
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
$debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
echo $debutvisite . "<br/>" . date('d/m/Y H:i:s', $debutvisite);
1305376200
14/05/2011 14:30:00
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h59   #8
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
J'ai une solution qui fonctionne (à première vue du moins).

Code PHP :
1
2
3
4
5
6
/* création de la date en Unix Time */
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
//$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite));
$debutvisite  = strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite);
$limitconfirm = $debutvisite - (15 * 24 * 60 * 60);

En espérant que cela pourra aider l'un ou l'autre qui se perdront sur le forum ...
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 18h01   #9
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Convertir des jours en seconde est une erreur.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 18h01   #10
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
Citation:
Envoyé par Madfrix Voir le message
La valeur de ce timestamp est '2011-05-14 00:00:00';
En fait, le timestamp sur le site est en GMT, alors que nous nous utilisons le GMT +2 semble-t-il. Cela explique la différence entre la valeur du site, et celle que l'on obtient lors de test sur serveur FR ou autre se trouvant dans une autre zone horaire.
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 18h05   #11
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Citation:
Envoyé par richard_sraing Voir le message
En fait, le timestamp sur le site est en GMT, alors que nous nous utilisons le GMT +2 semble-t-il. Cela explique la différence entre la valeur du site, et celle que l'on obtient lors de test sur serveur FR ou autre se trouvant dans une autre zone horaire.
euh oui mais là on parle pas en heures mais en mois
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 18h09   #12
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
Citation:
Envoyé par sabotage Voir le message
Chez moi c'est bon :
Code :
1
2
3
4
5
6
$datevisite = '14/05/2011';
$heuredebut = '14:30';
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
$debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
echo $debutvisite . "<br/>" . date('d/m/Y H:i:s', $debutvisite);
1305376200
14/05/2011 14:30:00
Le code est identique à ce que j'ai poster
Citation:
Envoyé par richard_sraing Voir le message
...
Code PHP :
1
2
3
4
5
6
7
/* création de la date en Unix Time */
list( $jour, $mois, $annee) = explode( '/', $datevisite );
list( $heure, $minute) = explode( ':', $heuredebut );
//$datecomplete = date('d-m-Y H:i:s', strtotime($annee.'-'.$mois.'-'.$jour.' '.$heurevisite)); // j'en ai plus besoin
 
$debutvisite  = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour), intval($annee));
$limitconfirm = mktime(intval($heure), intval($minute), 0, intval($mois), intval($jour)-15, intval($annee));
...
Et pourtant, lorsque j'ai fait les tests, cela ne fonctionnait pas, il ne me donnait pas les heures...

Et sabotage, que veux tu dire en disant
Citation:
Envoyé par sabotage Voir le message
Convertir des jours en seconde est une erreur.
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 18h12   #13
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 374
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 374
Points : 121
Points : 121
Envoyer un message via MSN à richard_sraing
Citation:
Envoyé par Madfrix Voir le message
euh oui mais là on parle pas en heures mais en mois
En mois ?

Pourtant je lis bien "Fri, 13 May 2011 22:00:00 GMT", soit le 14/05/2011 00:00:00 -2 heures, ou est ce que c'est moi qui tourne . Dans le cas contraire, je pense ne pas avoir compris la remarque...
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 20h45   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par richard_sraing Voir le message
Et sabotage, que veux tu dire en disant
Citation:
Envoyé par sabotage
Convertir des jours en seconde est une erreur.
un jour c'est pas forcement 24h donc pas forcement 86400 secondes
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h25.


 
 
 
 
Partenaires

Hébergement Web