Bonsoir à tous,

Après plusieurs heures passées à me tirer les cheveux à essayer de comprendre d'où venait mon erreur et comment y répondre, je suis forcé de constaté que j'aurais du mal à résoudre ça sans vous.
Voici la cause de calvitie certaine :

Je récupère un ensemble de données en ajax que j'affiche ensuite sur un dashboard.
Je souhaiterais que la date (timestamp) s'affiche ne vert si elle est de moins de 7 jours, en rouge si elle est de plus de 90 jours (reste normal sinon).

Souhaitant cependant sauvegarder les données brutes dans une variable globale, je stocke celles-ci dès le retour de la requête ajax.

Le problème que je rencontre est, qu'après avoir effectué les modifications sur la date plus tard dans le script, je constate que les modifications ont également été effectuées dans la variable globale ...

Voici mon code (j'ai synthétisé pour être plus rapidement compréhensible) :
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
var list_global = new Object();
 
function init(name) {
 
var request = $.get( 'get_data.php', { type : type, name : name });
 
request.done(function(data) {
 
   var result = JSON.parse(data);
 
   $.each( result, function(key,value) {
 
      var id = value.id;
 
      var get_elems = $.get("find_elem.php", { id: id });
 
      get_elems.done(function(data1) {
 
         var result = JSON.parse(data1);
 
         list_global['item'] = result;
 
         $.each( result.content, function( key, value ) {
 
            if (value.date) {
               value.date = check_date(value.date);
            }
 
            ul.append( Mustache.render(li, value) );
 
         });
      });
   });
});
 
}
Les dates sont bien modifiées avec les balises <SPAN> pour être affichées via Mustache, cependant, ces modifications ont également eu lieu dans la variable globale list_global.


Fonction de modification de date :
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
const OLD_DATE = 7776000;	// Correspond à 90 jours en secondes
const RECENT_DATE = 604800; // Correspond à 7 jours en secondes
 
function check_date( entry_date ) {
 
	var today = Math.floor(Date.now() / 1000);
	var diff = dateDiff(date, today);
 
 
	var full_date = new Date(entry_date * 1000);
	var day = full_date.getDate();
	var month = full_date.getMonth()+1;
	var year = full_date.getFullYear();
	var date = year+'-'+month+'-'+day;
 
	if ( diff > OLD_DATE ) {
		result = "<span style='color:blue'>"+date+"</span>";
	} else if ( diff < RECENT_DATE ) {
		result = "<span style='color:green'>"+date+"</span>";
	} else {
		result = date;
	}
 
	return result;
}
Est-ce que certain d'entre vous aurez une solution ou au moins une explication à ce "phénomène".
Personnellement je suis perdu et ne trouve pas cela très logique, mais je suis certain qu'il y a une explication !

Merci d'avance !

Sam