[RESOLU] strftime()

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 : [RESOLU] strftime()

Re: strftime()

par bibou51 » 18 janv. 2024, 14:25

bonjour ynx ,
Merci pour la réponse, ça fonctionne.

Re: strftime()

par ynx » 17 janv. 2024, 14:08

Bonjour,

A priori tu utilises le typage strict pour ton script.
Tu peux convertir le type des variables en utilisant le casting : https://www.php.net/manual/fr/language. ... ypecasting

Tu peux éventuellement convertir le paramètre $ladate en integer dans ta fonction :
function jour_date($ladate) {
    $ladate = (int) $ladate;
    // ...

Il serait p-e mieux de définir le type du paramètre en int pour ta fonction et faire la conversion lors de l'utilisation de cette fonction :
$timestamp = (int) '1705493019';
echo jour_date($timestamp);

function jour_date(int $ladate) {
    // ...

Re: strftime()

par two3d » 17 janv. 2024, 12:33

D'après l'erreur, ton code envoi une chaine vide à un moment donné, il te faut voir où et ne pas envoyer de chaine vide à ce moment ou ne pas appeler la fonction jour_date() quand la chaine est vide.

Re: strftime()

par bibou51 » 17 janv. 2024, 12:10

oui , mais comment corriger l'erreur ? Et à quel endroit ?
Merci d'avance car là je nage complètement et le pire c'est que je suis sûre que c'est tout simple.

Re: strftime()

par two3d » 17 janv. 2024, 11:47

L'erreur parle d'elle même. "Le format du timestamp doit être un int (entier), pas une chaine de caractère."

Re: strftime()

par bibou51 » 17 janv. 2024, 10:48

Bonjour et merci.
J'ai mis le code ci-dessus mais ça ne fonctionne toujours pas.
Voici le message d'erreur que j'ai :

Code : Tout sélectionner

Fatal error: Uncaught TypeError: date(): Argument #2 ($timestamp) must be of type ?int, string given in /home/vol15_7/byethost14.com/b14_29615537/phenixptp.fast-page.org/htdocs/core.php:233 Stack trace: #0 /home/vol15_7/byethost14.com/b14_29615537/phenixptp.fast-page.org/htdocs/core.php(233): date('d-m-Y', '') #1 /home/vol15_7/byethost14.com/b14_29615537/phenixptp.fast-page.org/htdocs/compte/accueil.php(13): jour_date('') #2 /home/vol15_7/byethost14.com/b14_29615537/phenixptp.fast-page.org/htdocs/compte/index.php(37): include('/home/vol15_7/b...') #3 {main} thrown in /home/vol15_7/byethost14.com/b14_29615537/phenixptp.fast-page.org/htdocs/core.php on line 233

Re: strftime()

par two3d » 17 janv. 2024, 00:08

IL te faut échapper les lettres dans le 1er paramètre de la fonction date() sinon il essaye de les convertir : '\L\e d/m/Y \à H:i'

J'ai également remplacé H:M par H:i.

J'ai également fait des "return" directement plutôt que de l'assigner à une variable retournée en fin de fonction.

La date envoyé à la fonction doit être un TIMESTAMP. SI tu veux envoyer un format "06/01/2024" il te faudra d'abord passer $ladate avec strtotime() avant de l'envoyer dans les date().
function jour_date($ladate){
	
	if(date("d-m-Y", time()) == date("d-m-Y", $ladate))
		return "Aujourd'hui à " . date("H:i", $ladate);
	
	else if(date("d", $ladate) == (date("d", time()) - 1) && date("m-Y", time()) == date("m-Y", $ladate))
		return "Hier à " . date("H:i", $ladate);

	return date('\L\e d/m/Y \à H:i', $ladate);
	
}

var_dump(jour_date(time()));//Aujourd'hui à ...
var_dump(jour_date(time() - 86400));//Hier à ...
var_dump(jour_date(time() - 864000));//Le ... à ...

Re: strftime()

par bibou51 » 16 janv. 2024, 19:00

Bonjour et merci pour la réponse.
J'ai essayé les fonctions date() et datetime.format mais je dois me tromper au niveau de la syntaxe car ça ne fonctionne pas.
Quant à la petite librairie je ne suis pas suffisamment calé pour arriver à l'intégrer correctement.
Sinon j'ai essayé de remplacer strftime() par date() et en supprimant les %.

Re: strftime()

par @rthur » 16 janv. 2024, 17:59

Bonjour,

C'est mieux d'indiquer le message d'erreur que tu rencontres et ce que tu as testé pour corriger le problème.

Moi je serai toi, je changerai mon code pour utiliser la fonction date() ou date_format()
https://www.php.net/manual/fr/function.date.php
https://www.php.net/manual/fr/datetime.format.php

A défaut, il existe une petite librairie qui rend fonctionnel la fonction strftime() sur les versions + récentes de PHP :
https://github.com/alphp/strftime
Mais il est préférable de mettre à jour ton code.

strftime()

par bibou51 » 16 janv. 2024, 17:32

Bonjour,
Je viens de remettre la main sur un de mes vieux site et j'ai un problème d'adaptation avec la fonction strftime()
Je n'arrive pas du tout malgré mes recherche à adapter ce script à php 8.1

Code : Tout sélectionner

function jour_date($ladate) { if (strftime("%d %m %Y", time()) == strftime("%d %m %Y", $ladate)) $ladate = "Aujourd'hui à " . strftime("%H:%M", $ladate); else if (strftime("%d", $ladate) == (strftime("%d", time()) - 1) && strftime("%m %Y", time()) == strftime("%m %Y", $ladate)) $ladate = "Hier à " . strftime("%H:%M", $ladate); else $ladate = strftime('Le %d/%m/%Y à %H:%M', $ladate); return $ladate; }
Je vous remercie d'avance pour l'aide.