Datostempling af websider

Det er ofte en god idé at forsyne websiderne med et tidsstempel, der angiver, hvornår filen sidst er opdateret med nye oplysninger. Det er et godt signal at sende til brugerne, der straks kan vurdere oplysningernes aktualitet.

Dette script

<script type="text/javascript">
  document.write("Senest opdateret " 
  + document.lastModified)
<script>

der giver dette resultat:
,
er jo meget enkelt.

Problemet med denne lette løsning er, at datoformatet er amerikansk, og at du også får et måske ret ligegyldigt klokkeslet med.

En løsning på dette problem er at bruge den streng, browseren returnerer, når den møder dokumentegenskaben lastModified.

<script>
var opdateret;
var revdato;
opdateret = new Date(document.lastModified);

aar = opdateret.getYear();
if (aar < 1000){ 	
	if (aar < 70){
	aar = 2000 + aar;
	}
	else aar = 1900 + aar;
}							
maaned = opdateret.getMonth() + 1;
if (maaned < 10){
	maaned = '0' + maaned;
}
dato = opdateret.getDate();
if (dato < 10){
	dato = '0' + dato;
}
dag = opdateret.getDay();
	
maanedNavn = new Array(12)
maanedNavn[0] = 'jan'
maanedNavn[1] = 'feb'
maanedNavn[2] = 'mar'
maanedNavn[3] = 'apr'
maanedNavn[4] = 'maj'
maanedNavn[5] = 'jun'
maanedNavn[6] = 'jul'
maanedNavn[7] = 'aug'
maanedNavn[8] = 'sep'
maanedNavn[9] = 'okt'
maanedNavn[10] = 'nov'
maanedNavn[11] = 'dec'

dagNavn = new Array(7)
dagNavn[0] = 'Søn'
dagNavn[1] = 'Man'
dagNavn[2] = 'Tir'
dagNavn[3] = 'Ons'
dagNavn[4] = 'Tor'
dagNavn[5] = 'Fre'
dagNavn[6] = 'Lør'

revdato = dagNavn[dag] + ' ' + dato + '. ' 
+ maanedNavn[maaned - 1] + ' ' + aar
</script>

der returnerer denne datostreng:

når du på siden indsætter scriptet

<script>document.write(revdato)</script>

Du kan pynte lidt på det ved i stedet at skrive

<script>document.write("Senest opdateret: "
-->	+ revdato)</script>

der giver følgende resultat:

Kommentarer

In princippet burde vi kunne finde årstallet blot ved aar=revisionsDato.getYear(); eller aar=revisionsDato.getFullYear();. Det sidste objekt er et JavaScript1.2 objekt, så det er ikke til rådighed i ældre browsere. Det første objekt returnerer årstallet i forskellige formater, alt efter, hvilken browser, der er tale om. Derfor er vi nødt til at tage hånd om disse formater ved at teste for dem og give strengen det format, der passer os. Det er det, der sker i linierne:

if (aar < 1000){ 	
	if (aar < 70){
	aar = 2000 + aar;
	}
	else aar = 1900 + aar;
}	

getMonth(); returnerer et et-cifret tal, 0 - 11 for Januar til december. Hvis vi vil bruge månedens nummer, er vi derfor nødt til at lægge én til for at få det rigtige månedsnummer. Her er der yderligere lagt et nul til foran månedens nummer, således at datoen 1. januar ville blevet skrevet som 01/01, hvis det var det format, vi ønskede.

Hvis vi derimod vil have, som her, månedens navn, er vi nødt til at omsætte månedens tal. Det sker i Arrayet maanedNavn. Når vi så aftaster Array'et i document.write-sætningen, er vi nødt til at trække den ene fra, vi lagde til, da vi erklærede den variable maaned.

Nogenlunde den samme øvelse skal vi igennem, hvis vil have ugedagenes navne. JavaScripts “navne” på ugedagene er fra 0 til 6, startende med søndag. Disse tal konverterer vi til ugedagens navne efter samme princip som for månedens navne.

Eksternt script

Det er ikke nødvendigt at have scriptet liggende på alle sider. I og med at vi har oprettet den variable revdato, kan vi indsætte den på en hvilkensomhelst webside med scriptet

<script>document.write(revdato)</script>

– forudsat naturligvis, at det lange script er indsat i HEAD-delen af dokumentet ved hjælp af sætningen:

<script type="text/javascript" 
src="[sti]opdateringsdato.js"><script>

Pakkede arrays

De variable maanedNavn og dagNavn er arrays, som også kan oprettes som såkaldt pakkede arrays. Det vil sige, at du ikke behøver at oprette hvert punkt i array med sit eget variabelnavn. Disse arrays kan skrives som

maanedNavn = new Array('jan','feb','mar','apr','maj',
'jun','jul','aug','sep','okt','nov','dec')

– for månedernes vedkommende og

dagNavn = new Array('Søn','Man','Tir','Ons',
'Tor','Fre','Lør')

– for ugedagenes vedkommende.

Funktion i stedet for variabel

Det script, der er gengivet herover, lægger værdien af lastModified i den fordanskede version ind i den variable revdato, og det er så denne variable, vi skriver på websiden.

Der er ikke noget i vejen for i stedet at lægge et funktionskald ind på websiden, f.eks. således:

<script>opdateringsdato()</script>

Det kræver så et lidt andet script, der deklarerer funktionen opdateringsdato(). Der er ikke den helt store forskel, men for fuldstændighedens skyld gengiver jeg også dette script:

function opdateringsdato(){
var opdateret;
var revdato;
opdateret = new Date(document.lastModified);

aar = opdateret.getYear();
if (aar < 1000){ 	
	if (aar < 70){
	aar = 2000 + aar;
	}
	else aar = 1900 + aar;
}							
maaned = opdateret.getMonth() + 1;
if (maaned < 10){
	maaned = '0' + maaned;
}
dato = opdateret.getDate();
if (dato < 10){
	dato = '0' + dato;
}
dag = opdateret.getDay();
	
maanedNavn = new Array(12)
maanedNavn[0] = 'jan'
maanedNavn[1] = 'feb'
maanedNavn[2] = 'mar'
maanedNavn[3] = 'apr'
maanedNavn[4] = 'maj'
maanedNavn[5] = 'jun'
maanedNavn[6] = 'jul'
maanedNavn[7] = 'aug'
maanedNavn[8] = 'sep'
maanedNavn[9] = 'okt'
maanedNavn[10] = 'nov'
maanedNavn[11] = 'dec'

dagNavn = new Array(7)
dagNavn[0] = 'Søn'
dagNavn[1] = 'Man'
dagNavn[2] = 'Tir'
dagNavn[3] = 'Ons'
dagNavn[4] = 'Tor'
dagNavn[5] = 'Fre'
dagNavn[6] = 'Lør'

revdato = dato + '. ' + maanedNavn[maaned - 1] 
+ ' ' + aar;
document.write("Senest opdateret: " + revdato)
}

Det er faktisk kun den første og den sidste linie, der er forskellige fra det første script.

Denne side er senest opdateret: 11. December, 2006