Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour à tous,
Voici mon petit problème :
J'ai une durée en seconde : 36655552220011 s
et je voudrais la faire apparaitre de manière formatée :
5y 3m 10d 8h 30min 9s [ce résultat est donné à titre d'exemple, je me suis pas amusé à faire le calcul ^^]
Mon souci c'est que je suis parti sur un algo itératif mais je me rends compte qu'il faudrait en fait en faire un récursif. Mon problème est que la base des calculs de temps change tout le temps : d'abord 60 ensuite 24, 30, 12, 10...
Donc j'avoue que je ne sais pas trop comment aborder le problème pour faire une fonction récursive comme il faut...
Merci d'avance pour les conseils prodigués.
Réponse de MK sur l'ancien Forum
Saluton MasKime,
Il va falloir nous rejoindre sur le nouveau forum :
http://forum.phpdebutant.org/index.php
En attendant, pourquoi ne pas retravailler le résultat d'une fonction date()
<?php
$secondes=36655552220011;
echo date('y m d H i s',$secondes); ?>
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
A la réponse d'MK
date() peut travailler avec un timestamp, il me donne donc bien une date...
Je comprends pas comment est ce que je pourrais retravailler un résultat venant de cette fonction???
Merci de m'éclairer
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Coucou Max,
Je ne comprends pas ta question à propos du retravail de la fonction date()...
Tu peux agir sur ce résultat comme tout autre...
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Hello,
Et bien un timestamp est une date en seconde établi à partir de la naissance d'UNIX si mes souvenir sont bons.
Donc si je lui passe une durée en seconde en param il va me retourner une date et non une durée formatée comme je le voudrais:
va afficher : 70y 01m 01d 01h 00min 01s
Alors que je voudrais : '01s' tout seul...
Donc en fait ma question était plutot : En quoi est ce que date() peut m'aider à obtenir ce que je veux ^^
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Alors que je voudrais : '01s' tout seul...^
Non ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Sinon, la totale :
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Oui parser le résultat je sais faire ^^
Mais encore une fois il s'agit d'une durée et non d'une date définie par un timestamp.
C'est une fonction qui pourrait être utilisée pour afficher le temps qu'une page à mise à se charger par exemple.
On démarre le chrono au début du script, on l'arrête en fin de script et on obtient un nombre de secondes.
De ce nombre de secondes tu affiche "1min 32s"
Donc à ce niveau je suis capable, mais ma fonction à moi doit pouvoir gérer les années (je me demande si je pourrais pousser le vice jusqu'à la décennie)
Est ce que je suis clair ou est ce que je suis trop con pour comprendre les réponses ?
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Est ce que je suis clair ou est ce que je suis trop con pour comprendre les réponses ?
Parfois, on se demande
Qui peut le plus, peut le moins
date attends un timestamp, certes, mais 1 est un timestamp.
Tu as vu que dans mon dernier exemple, j'ai repris ta valeur initiale telle quelle 36655552220011.
Le résultat fourni ne te convient pas ?
Pour mémoire
donne
70 01 01 01 00 00 soit le 1er janvier 1970 à 01h 00:00
Si tu remplaces le 0 par -3600 tu obtiens
70 01 01 00 00 00, donc le 1er janvier 1970 à 00h 00:00
Après, à toi de jouer pour ajuster, mais c'est moins galère que de vouloir tout ré-écrire et ça tient compte des années bissextiles, des heures d'été etc...
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Alors juste à titre informatif.
M'aidant des conseils de MK je me met en quête du timestamp de l'an 0 pour pouvoir faire mes calculs de durées ^^
Donc je me dis, je vais feinter, je vais demander à mktime() de me donner le timestamps de mktime(0,0,0,0,0,0);
De ça il me retourne : 943916400
Ok... et quand j'utilise le formatage de date() fourni par MK j'obtiens le résultat suivant :
99y 11m 30d 00h 00min 00s
Ca doit pas être la bonne manière, je vous tiens au courant quand j'aurais trouvé le timestamp de l'an 0
Dernière modification par Maskime (11-05-2009 13:33:58)
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
M'aidant des conseils de MK je me met en quête du timestamp de l'an 0 pour pouvoir faire mes calculs de durées ^^---- je vous tiens au courant quand j'aurais trouvé le timestamp de l'an 0
Ça risque d'être long, php ne gère pas les dates antérieures au 1-1-1970, ou très mal, sans compter sur les changements entre calendriers grégoriens et juliens.
A lire, très instructif :http://mutah.free.fr/blog/index.php?200 … -des-dates, même si un peu de baby duck syndrom Python.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pour ce qui est de la limitation dans date() la première barrière que j'ai rencontré avant le problème de la qualité de la gestion date, c'est la longueur du integer sur une plateforme 32 bits...
Du coup je ne peux pas descendre en dessous de :
01y 12m 13d 20h 55min 13s
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Si tu fais
tu obtiens
71y 02m 24j 13H 47i 11s
tu n'as plus qu'à soustraire membre à membre avec le résultat de date('y\y m\m d\j H\H i\i s\s',0) et tu ne devrais pas être loin de ce que tu cherches à faire, non ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
retourne
Array
(
[0] => 27
[1] => 7
[2] => 3
[3] => 21
[4] => 1
[5] => 35
)
Les écarts sont dus aux arrondis de 365.25 et de 30.43, sinon ça le fait, non ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je vais faire mon chieur mais ça reste franchement malin.
Le problème est que tes écarts sur les heures les minutes sont tout de même important
Mais du coup je peux penser un algo pour la partie heure/minutes/secondes et prendre le tiens pour la partie année mois jours ^^
Merci
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Le problème est que tes écarts sur les heures les minutes sont tout de même importants
Mon calcul initial de $durée est bidon, je ne sais pas comment tu vas récupérer ta durée au départ, le but est de la convertir en timestamp, sauf à ce qu'elle y soit nativement.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Ok
Alors après test avec une valeur passée en seconde, j'obtiens en effet des trucs franchement cohérents.
Merci MK ^^
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Ne dankinde.
L'histoire du -3600 doit provenir du fait qu'on est en heure d'été.
Il y a peut-être moyen d'oblitérer ça avec un set php quelconque.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Ben en fait je me sert déjà du date_default_timezone_set()
Donc pas de souci de ce coté la
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Pages :: 1