8768 sujets

Développement web côté serveur, CMS

hello,

petit problème avec les dates,
ma requête me donne une date sous format 201406 (pour le moi de Juin 2014)
j'aimerais enlever 12 mois à cette date... comment faire ? si je fais -12 cela va me donner 201394 ?
Modifié par JENCAL (30 Jun 2015 - 11:56)
Modérateur
Salut,
<<<EDIT

Rallala, l'énoncé de ton problème est confus. sql, php ?
EDIT;
ça devrait fonctionner en faisant ceci :

SELECT
 champDate - INTERVAL 1 YEAR
FROM 
....


<<<EDIT

en php un truc comme :

$date = "201406";
//dans le cas où il y a un int
//settype($date,'string');

preg_match('#(\d{4})(\d{2})#',$date,$listeDate);

$timestampDate = mktime (0,0,0, $listeDate[2] ,1,$listeDate[1]);
$unAn = 365 * 24 * 60 * 60;

$moinsUnAn = date('Y m',$timestampDate - $unAn);

echo $moinsUnAn;




EDIT;
Modifié par niuxe (30 Jun 2015 - 13:50)
Merci pour ta réponse,
j'ai résolu mon problème !

je trouve qu'en JS c'est plus simple!

this._periodeEnd = moment("2015, 03").endOf('month');
this._periodeStart = this._periodeEnd.clone().subtract(11, 'month').startOf('month');
Modérateur
Salut,

D'une manière général ma réponse par rapport à ta solution est :
oui mais non ! (suivant l'énoncer de ton problème : tu parles de requête et non de dynamisation du DOM ou autres opérations du même genre)

Pourquoi ? Javascript intrusif et obstructif !
Ce qui pour conséquence :
1. Référencement tu oublies !
2. document pas du tout accessible puisque les données finales sont erronées !

Peux tu en dire un peu plus sur ton souci initial ? Comme je te l'ai dit, c'est confus. Si sur ce que tu travailles, tu ne désires pas le rédiger sur le forum pour des raisons privées, je comprends. Dans ce cas là, je veux bien un mp. Sache que c'est exceptionnel. Je n'invite personne à m'envoyer des mp pour répondre à leur souci. C'est sur le forum que ça se passe.
Modifié par niuxe (01 Jul 2015 - 21:16)
Mon problème initial est résolu, je vous remercie pour vos réponse bien précieuses;

Il est vrai que je ne peux pas exposer le code source d'origine ici;

le problème, je vais essayer d'être clair est :
- J'avais un tableau avec un header contenant 12 mois glissant (de janvier à décembre)
- Dans mon référentiel j'avais des données allant de Avril à mars
- il fallait donc que le header doit soit dynamique
- pour cela, j'ai un champ "mois max"
- De ce fait j'ai de l'ajax AVANT de récurer mon data,et celui ci me récupère le mois max (mars)
- et en javascript j'ai adapter mon tableau avec la méthode moment() en initiant mois et moi start (-12)

Pour soustraire une date (qui était mon problème inital) je me suis donc servi de moment().
Modifié par JENCAL (02 Jul 2015 - 10:14)
Modérateur
@cvs : +1

Je n'ai pas du tout pensé à l'objet date Smiley confused (oh mon dieu comment ai je fait pour ne pas y penser). J'ai fait un code simple pour aiguiller (mais mal aiguillé, je te l'accorde puisque dans mon code je ne prends pas en compte les années bisextiles par exemple). Comme j'ai dit, l'énoncé du sujet était un peu flou.

@Jencal : C'est bien ce qu'il me semblait. la source de données vient du serveur via l'Ajax que tu utilises apparemment à bon escient pour éviter le reload de la page. De ce fait tu injectes les nouvelles données à un endroit précis. Si tu coupes l'Ajax et le JS, ton formulaire doit fonctionner normalement. Dans ce cas, le JS apporte une meilleur expérience utilisateur. C'est un gros plus mais pas nécessaire.

Donc, tu dois dynamiser tes données en back et non en front. Si ta source de données provient d'une base de données, je te conseille fortement de dynamiser cette étape. Pour ce faire, tu créeras automatiquement une requête sql dynamique. Si tu ne penses pas savoir comment faire, je peux te donner un coup de main si tu veux. Aussi regarde l'objet dateTime (bon conseil de CVS). Tu verras, il est simple à utiliser et il est souvent utile.

Cet article devrait aussi t'aider dans ta démarche.
Modifié par niuxe (02 Jul 2015 - 23:24)