L'oggetto document
ha tra le sue proprietà anche lastModified
, la quale restituisce una stringa contenente le informazioni temporali (giorno, mese, anno, ora ecc.) sull'ultima modifica apportata al documento. Per quanto possa sembrare utile a prima vista, questa proprietà è del tutto ingestibile di per sè. Infatti il formato della stringa restituita dipende dal browser e quindi varia di implementazione in implementazione. Gli sviluppatori hanno preso l'abitudine di trasformare questa stringa in un oggetto Date
passandola come parametro al costruttore di tale oggetto. Ma i risultati variano ancora. Vediamo perchè.
Dato che la stringa di partenza dipende dal browser, è chiaro che il nuovo oggetto Date
creato non potrà essere coerente tra le implementazioni. Quindi il seguente codice:
var mDate = new Date(document.lastModified);
var month = mDate.getMonth()+1;
var day = mDate.getDate();
var year = mDate.getFullYear();
var hours = mDate.getHours() + 2;
var minutes = mDate.getMinutes();
var seconds = mDate.getSeconds();
var modificationDate = day + '/' + month + '/' + year + ' ' +
hours + ':' + minutes + ':' + seconds;
non restituirà sempre il risultato voluto. La stringa di partenza può essere sia nel formato Sat, Aug 6, 2011 18:00:00
che 6/8/2011, 18:00:00
.
Come si è detto prima, lastModified
dipende dall'implementazione specifica del browser.
Un altro aspetto da considerare è il rapporto tra una pagina vista in locale e la stessa pagina vista in remoto. In locale in alcuni casi i browser non visualizzano la stringa risultante dalla conversione, specie se non è attiva alcuna connessione al web. In remoto, non è altresì chiaro se i browser utilizzino anche le informazioni sulla data e l'ora fornite dal server oltre alle informazioni specifiche del file.
Inoltre, cosa si intende per "ultima modifica"? Comunemente si dovrebbe affermare che il file è stato aperto, modificato e salvato. In realtà molti browser considerano anche una semplice operazione di copia del file come una modifica.
Il consiglio che posso dare in questo caso è quello di operare una normalizzazione della stringa prima di passarla all'oggetto Date
, per esempio operando una detection del browser come la seguente:
var browser;
var ua = navigator.userAgent;
if(ua.indexOf('Chrome') != -1) {
browser = 'Chrome';
} else if (ua.indexOf('Safari') != -1) {
browser = 'Safari';
} else if(ua.indexOf('Opera') != -1) {
browser = 'Opera';
} else if(ua.indexOf('Firefox') != -1) {
browser = 'Firefox';
} else if(ua.indexOf('MSIE') != -1) {
browser = 'Internet Explorer';
}
Test
Potete visionare il test in questa pagina.