Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 11/01/2012, 14h00   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 35
Points : 14
Points : 14
Par défaut strftime : enlver le 0 avec W

Bonjour à tous,

Voilà, j'ai un moteur de recherche qui interroge les locations en base de données et me retourne que celles disponibles pour une semaine choisie.
La fonction strftime() me permet de retourner un numéro de semaine dans l'année à partir d'une date d'arrivée :

Code :
$semaine_arrivee = strftime("%W", mktime(0, 0, 0, $mois_arrive, $jour_arrive, date('Y')));
Cependant %W me retourne 01, 02, 03 et non pas 1, 2, 3 pour mes premières semaines de l'année...

En base de données j'ai des entrées sous la forme 1, 2, 3 et j'aimerais ne rien y changer, je trouve ça plus logique, surtout pour utiliser les incréments dans mes boucles de semaines ($i++);

Bref, voilà le "pansement" que j'ai appliqué pour sauver le coup :
Code :
1
2
3
4
// corrige les semaines 01 en 1, 02 en 2...
$origine = array("01", "02", "03", "04", "05", "06", "07", "08", "09");
$remplace = array("1", "2", "3", "4", "5", "6", "7", "8", "9");
$semaine_arrivee = str_replace($origine, $remplace, $semaine_arrivee);
Voici mes questions :
  1. est ce qu'il est possible de bricoler la fonction strftime pour en faire ce que j'en veux : 1, 2, 3 et non 01, 02...
  2. sinon : ma solution est-elle la plus optimisée ?
Lexarino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 14h37   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
y a plus simple :
Code :
$semaine_arrivee = (int)strftime("%W", mktime(0, 0, 0, $mois_arrive, $jour_arrive, date('Y')));
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/01/2012, 14h38   #3
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Salut,
une solution non portable :
- sous Win "%#W"
- sous Linux "%-W"

ou d'autres méthodes qui me semblent effectivement plus efficace que celle que tu proposes :

Code :
1
2
3
4
5
6
7
if($semaine_arrivee[0] === "0")    {
   $semaine_arrivee = substr($semaine_arrivee, 1, 1);
// des bons vieux cast
   $semaine_arrivee += 0;
    $semaine_arrivee = (int)$semaine_arrivee;
    $semaine_arrivee = intval($semaine_arrivee);
}
Sinon est-ce que tu as vu que strftime() retourne 00 pour une première semaine étalée sur 2 années ?
__________________
Vive les roues en pierre
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h34   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 35
Points : 14
Points : 14
Merci vorace ! Excellent !
Djakisback non je ne savais pas pour les deux années. Merci du tuyau.

Vous êtes géniaux bonne journée !
Lexarino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h52.


 
 
 
 
Partenaires

Hébergement Web