Rigtigt mange af de applikationer jeg rører ved, har Ajax kald der returnerer objekter der har datoer med som payload. Jeg har scriblet lidt om Json datoer tidligere, men mangler lige en lille funktion, som jeg har taget mig selv i at skrive igen og igen. En klientside funktion, der kan omsætte Json-datoen til et JavaScript Date objekt.
Jeg synes en sådan extension, hører til som en statisk metode på Date objektet, så jeg implementerer den som en sådan. Det er måske lidet kendt, men alt i JavaScript er objekter – også funktioner, så man laver en statisk metode ved at tildele en objektet metoden direkte på den ønskede property, som så i dette tilfælde bliver en funktion – en statisk funktion.
Det centrale i en sådan funktion, er det regulære udtryk, som skal bruges i replace. Der er en lille faldgrubbe i udtrykket, da vi leder efter kombinationen ‘\/’. Begge karakterer er specielle sprogelementer i det regulære udtryk, så man skal escape dem, og mønsteret bliver til: ‘\\\/’ – nemlig hele 3 backslashes. Det er selvfølgelig bare med til at gøre udtrykket mere funky (og og mig mere nørdet, når jeg kan diske op med det).
Alt i alt ender vi op med en extension der ser således ud:
Date.parseJson = function(json) {
var re = /\\\/Date(\d+)\\\//;
var code = json.replace(re, "new Date($1)");
if (code != this)
throw new Error (“Ikke en Json dato: ” + json);
return eval(code);
};
Nu kan vi parse Json datoer:
var date = Date.parseJson("\/Date(1250753602336)\/");
Code on…