Fonction "Il y a " non compatible avec time() et erreur de timestamp

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction "Il y a " non compatible avec time() et erreur de timestamp

Re: Fonction "Il y a " non compatible avec time() et erreur de timestamp

par or 1 » 05 oct. 2019, 00:03

<?php
function format($datetime) {
            $now = time();
            $created = strtotime($datetime);
            // La différence est en seconde
            $diff = $now-$created;
            $m = ($diff)/(60); // on obtient des minutes
            $h = ($diff)/(60*60); // ici des heures
            $j = ($diff)/(60*60*24); // jours
            $s = ($diff)/(60*60*24*7); // et semaines
	var_dump($now, $created, $diff);
            if ($diff < 60) { // "il y a x secondes"
                return 'Il y a '.$diff.' secondes';
            }
            elseif ($m < 60) { // "il y a x minutes"
                $minute = (floor($m) == 1) ? 'minute' : 'minutes';
                return 'Il y a '.floor($m).' '.$minute;
            }
            elseif ($h < 24) { // " il y a x heures, x minutes"
                $heure = (floor($h) <= 1) ? 'heure' : 'heures';
                return 'Il y a '.floor($h).' '.$heure;
            }
            elseif ($j < 7) { // " il y a x jours, x heures"
                $jour = (floor($j) <= 1) ? 'jour' : 'jours';
                return 'Il y a '.floor($j).' '.$jour;
            }
            elseif ($s < 5) { // " il y a x semaines, x jours"
                $semaine = (floor($s) <= 1) ? 'semaine' : 'semaines';
                return 'Il y a '.floor($s).' '.$semaine;
            }
            else { // on affiche la date normalement
                return strftime("%d %B %Y à %H:%M", $created);
            }
        }
echo date("c")."<br>";
echo format("2019-09-27 18:56:53")."<br>";
echo format("2019-10-04 14:56:53")."<br>";
echo format("2019-10-04 17:53:53")."<br>";
echo format("2018-10-04 17:53:53")."<br>";
echo format("2019-09-04 17:53:53")."<br>";
echo format("2001-10-04 17:53:53")."<br>";
echo format(time())."<br>";
testé sur http://phptester.net/ donne :
2019-10-04T17:58:46-04:00
int(1570226326) int(1569625013) int(601313) Il y a 6 jours
int(1570226326) int(1570215413) int(10913) Il y a 3 heures
int(1570226326) int(1570226033) int(293) Il y a 4 minutes
int(1570226326) int(1538690033) int(31536293) 04 October 2018 à 17:53
int(1570226326) int(1567634033) int(2592293) Il y a 4 semaines
int(1570226326) int(1002232433) int(567993893) 04 October 2001 à 17:53
int(1570226326) bool(false) int(1570226326) 31 December 1969 à 19:00

on a un bool(false) pour $created quand le paramètre passé est time() d'où un résultat inattendu. avec d'autres valeurs, la fonction fonctionne.

Re: Fonction "Il y a " non compatible avec time() et erreur de timestamp

par Invite » 04 oct. 2019, 23:44

Voici ce que je donne sur une page test:

Code : Tout sélectionner

<!DOCTYPE html> <html> <head> <?php require_once('php/fonctions/date.php'); $Date = new DateHelper(); ?> <title></title> </head> <body> <?= $Date->format(time()); ?> </body> </html>
voici ce que je reçois: 01 January 1970 à 01:00

Re: Fonction "Il y a " non compatible avec time() et erreur de timestamp

par Invite » 04 oct. 2019, 23:31

est-il possible que ce soit le serveur sur lequel est hébergé le site/base de données qui produit cela? car c'est un serveur linux et ne m'y connaissant pas trop peut-être que cela change quelque chose, concernant la une valeur utilisée j'utilise CURRENT_TIMESTAMP dans une colonne de type timestamp donc le temps en tant que 2019-09-27 18:56:53

cette fonction fonctionne-t-elle chez-vous avec un time() ou avec un timestamp?? :/

Re: Fonction "Il y a " non compatible avec time() et erreur de timestamp

par or 1 » 04 oct. 2019, 20:29

j'étais testé, cette fonction fonctionne correctement.
il faudrait nous donner les valeurs passées en paramètre qui aboutissent à un résultat incorrect.

Fonction "Il y a " non compatible avec time() et erreur de timestamp

par Invite » 04 oct. 2019, 20:12

Bonjour,
je viens vers vous car j'ai un gros problème que je n'arrive pas à régler, j'ai créé un site et souhaitait afficher les dates de sorte à ce que hier est "Il y a 1 jour" par exemple.
J'ai pour cela trouvé une fonction DateHelper sur le net qui m'a bien aidé, mais celle-ci n'est pas compatible avec le time() car peu importe la valeur elle y affiche '1er janvier 1970' ce qui est problématique. J'ai donc trouvé une solution alternative qui est de mettre la valeur de ma date_creation dans la db en timestamp et la valeur par défaut CURRENT_TIMESTAMP, cependant celle-ci affiche "Il y a -6698 secondes" peu importe le sujet
Pouvez-vous m'aider à faire en sorte que ma fonction soit compatible avec un time() ??
la voici:

Code : Tout sélectionner

<?php class DateHelper { function format($datetime) { $now = time(); $created = strtotime($datetime); // La différence est en seconde $diff = $now-$created; $m = ($diff)/(60); // on obtient des minutes $h = ($diff)/(60*60); // ici des heures $j = ($diff)/(60*60*24); // jours $s = ($diff)/(60*60*24*7); // et semaines if ($diff < 60) { // "il y a x secondes" return 'Il y a '.$diff.' secondes'; } elseif ($m < 60) { // "il y a x minutes" $minute = (floor($m) == 1) ? 'minute' : 'minutes'; return 'Il y a '.floor($m).' '.$minute; } elseif ($h < 24) { // " il y a x heures, x minutes" $heure = (floor($h) <= 1) ? 'heure' : 'heures'; return 'Il y a '.floor($h).' '.$heure; } elseif ($j < 7) { // " il y a x jours, x heures" $jour = (floor($j) <= 1) ? 'jour' : 'jours'; return 'Il y a '.floor($j).' '.$jour; } elseif ($s < 5) { // " il y a x semaines, x jours" $semaine = (floor($s) <= 1) ? 'semaine' : 'semaines'; return 'Il y a '.floor($s).' '.$semaine; } else { // on affiche la date normalement return strftime("%d %B %Y à %H:%M", $created); } } } ?>