Bonjour,
J'aimerai traduire un champ date (de format date classique) d'une table de ma base de donnée, en numéro se semaine.
Mais ne sais absolument pas comment m'y prendre... une idée??
Merci beaucoup
Bonjour,
J'aimerai traduire un champ date (de format date classique) d'une table de ma base de donnée, en numéro se semaine.
Mais ne sais absolument pas comment m'y prendre... une idée??
Merci beaucoup
Salut
En PHP : tout est dans la doc : ici. Regarde le paramètre 'W'
En base de données, il faudrait préciser quel SGBD tu utilises.
Merci,
C'est la première fois que je fais ça, alors je ne sais carrément pas comment m'y prendre.
Est-ce que dois mettre directement une formule dans le champ de la base de donnée? Là, j'ai mis en champ en date, mais je ne vois rien pour convertir cela en numéro de semaine...
Salut,
Suffit de convertir la date récupérée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $date = new DateTime($dateBdd); $numSemaine = $date->format('W'); echo $numSemaine;
Dans ta table, ton champs ne doit pas etre au format date mais en numérique alors.
Et, dans ton php tu transformes ta variable date.
Merci pour vos réponses.
Quand je fais ma requête:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part $req = $DB->query('SELECT id,title,date,datemaj FROM events etc...
Est-ce que je peux insérer une fonction pour directement convertir le contenu de mon champ date?
Si tu veux récupérer le numéro de semaine directement dans ta requête tu peut faire ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $req = $DB->query('SELECT id, title, date, DATE_FORMAT(dateMaj, "%U") AS numSemaine FROM events');
Essai le code ici
Merci Amoiraud, je n'ai pas d'affichage de bug en mettant en place ta requête.
Par contre, je n'obtiens pas la date convertie en numéro de semaine...
Je n'obtiens rien du tout... voici le résultat de la requête:
ce que je voudrais convertir, c'est "date" et non "datemaj", mais je l'ai corrigé dans le requête, et cela ne fonctionne pas.(
[0] => Array
(
[2] => Array
(
[numéro semaine] => Array
(
[2013-08-06 10:46:47] => Test
)
)
)
)
Dans le crochet contenant "numéro semaine", je n'ai plus rien, c'est vide, alors qu'avant, j'avais la date, renvoyée par la base de données...
Mais je pense qu'on est sur la bonne voie, c'est super!
Il faudrait quand même que tu répondes à la question concernant le SGBD sur lequel tu travailles.
Et ensuite : donner le format de la date dans la base de données.
Enfin à tout hasard y a des chances que le mot "date" soit un mot réservé donc il faudrait l'écrire comme ça `date` avec les `` autour
Oui, pardon, j'ai oublié, je travaille avec MySQL, version 5.5.24.
J'utilise Wamp.
J'ai essayé de mettre les cotes autour de `date`, mais ça ne change rien...
Mon format de date dans la base de données est de type aaaa-mm-jj
Bon, est ce que ceci te renvoie quelque chose de viable :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part SELECT WEEK(`date`, 3) FROM `events`
Merci, mais non, cela me renvoie une page blanche.
Mais quand j'ai cette requête :
On a une bonne lecture de ce qu'il y a dans la base de données, étant donné qu'on obtient:$req = $DB->query('SELECT id, title, datemaj, date FROM events');
[2013-01-06] correspond à ce qu'il y a dans la colonne date, et que je voudrais convertir en numéro de semaineArray
(
[0] => Array
(
[2] => Array
(
[2013-01-06] => Array
(
[2013-08-06 10:46:47] => Capacité de production disponible
)
)
)
)
Je voudrais savoir comme un simple SELECT comme le tien peut te renvoyer un tableau multidimensionnel comme celui que tu indiques :
Tous les codes qui t'ont été proposés sont corrects, essaie les dans phpmyadmin, tu verras, le problème est ailleurs.array( 0 => array( 2 => array( '2013-01-06' => array( '2013-08-06 10:46:47' => 'Capacité de production disponible' ) ) ) )
En fait, j'ai deux fichiers principaux :
mon index.php:
Mon fichier date.php:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 <body> <?php require('config.php'); require('date.php'); $date = new Date(); $year = date('Y'); $events = $date->getEvents($year); $dates = $date->getAll($year); ?> <div class="periods"> <div class="year"><?php echo $year; ?></div> <?php date('W'); ?> <?php $dates = current($dates); ?> <?php foreach ($dates as $d=>$semaines): ?> <div class="semaine" id="semaine<?php echo $d; ?>"> <table> <?php foreach (array_chunk($semaines, 8) as $row) { ?> <tr> <?php foreach ($row as $date) { ?> <td> <div class="relative"> <div class="day"><?php echo $d; ?></div> </div> <div class="daytitle"> <?php echo ('Semaine '); ?><?php echo $d; ?> </div> <ul class="events"> <?php if(isset($events[$time])): foreach($events[$time] as $e): ?> <li><?php echo $e; ?></li> <?php endforeach; endif; ?> </ul> </td> <?php } ?> </tr> <?php } ?> </table> <table> <thead> <tr> <?php $end = end($semaines); foreach($semaines as $d=>$w): ?> <td> <div class="relative"> <div class="day"><?php echo $d; ?></div> </div> <div class="daytitle"> <?php echo ('Semaine '); ?><?php echo $d; ?> </div> <ul class="events"> <?php if(isset($events[$time])): foreach($events[$time] as $e): ?> <li><?php echo $e; ?></li> <?php endforeach; endif; ?> </ul> </td> </tr><tr> <?php endforeach; ?> <td class="padding"></td> </tr> </thead> <tbody> <tr> </tr> </tbody> </table> </div> <?php endforeach; ?> </div> <div class="clear"></div> <pre><?php print_r($events); ?></pre> </body>
et le fichier config.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php class Date{ var $semaines = array('S01', 'S02', 'S03', 'S04', 'S05', 'S06', 'S07', 'S08', 'S09', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20', 'S21', 'S22', 'S23', 'S24', 'S25', 'S26', 'S27', 'S28', 'S29', 'S30', 'S31', 'S32', 'S33', 'S34', 'S35', 'S36', 'S37', 'S38', 'S39', 'S40', 'S41', 'S42', 'S43', 'S44','S45','S46','S47','S48','S49','S50','S51','S52','S01'); function getEvents($year){ global $DB; $req = $DB->query('SELECT id,title, WEEK(date, "%U") FROM events WHERE YEAR(date)='.$year); $r = array(); while($d = $req->fetch(PDO::FETCH_OBJ)){ $r[strtotime($d->date)][$d->id]= $d->title; } return $r; } function getAll($year){ $r = array(); $date = new DateTime($year.'-01-01'); while($date->format('Y') <= $year){ $y = $date->format('Y'); $d = $date->format('W'); $w = $date->format('w'); $r[$y][$m][$d] = $w; $date->add(new DateInterval('P1W')); } return $r; } }
Mais je ne vois vraiment pas où est le souci!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php try{ $DB = new PDO('mysql:host=localhost;dbname=calendrier','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8')); } catch(PDOException $e){ echo 'Erreur de connexion'; exit(); } ?>
Euh tu t'es mélangé les pinceaux :
C'est
Code : Sélectionner tout - Visualiser dans une fenêtre à part $req = $DB->query('SELECT id,title, WEEK(date, "%U") FROM events WHERE YEAR(date)='.$year);et dans ce bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $req = $DB->query('SELECT id, title, `date`, WEEK(`date`, 3) AS num_semaine FROM events WHERE YEAR(date)='.$year);je ne vois pas où tu récupères le numéro de semaine...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $r[strtotime($d->date)][$d->id]= $d->title;
Ben le numéro de la semaine est déclaré dans date.php:
Puis je récupère mes noms de semaine dans un array dans index.php, mais j'ai des soucis pour mettre mon tableau en forme aussi, j'ai réussi à le mettre "en page", mais les valeurs de mes numéros de semaines ne s'affichent pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $d = $date->format('W');
Brefs j'ai quelques soucis!!!
Partager