zaterdag 19 februari 2011

2 februari heb ik een functie laten zien die een ISO datetime string omzet naar een UTC-base Date. Maar helaas blijkt deze functie niet in alle browsers te werken. In Firefox 3.6.x blijkt dat de argumenten meegegeven aan Date.UTC per se Integers moeten zijn, terwijl er Strings worden aangegeven. Bovendien is het converteren van numerieke strings naar Integers met new Number(s) wat onhandig.


Eerst heb ik een method gemaakt voor Arrays, die een functie/method toepast op alle Array-elementen en een Array met de resultaten retourneert:


Array.prototype.map =function(f){
res =new Array();
for(var i=0; i<this.length; i++){
res.push(f(this[i]));
};
return res;
};


Met deze method is de functie toUTC aangepast. Omdat toUTC() alleen van toepassing is op Strings, heb ik er maar meteen een method voor het String-object van gemaakt (veranderingen zijn onderstreept):

String.prototype.toUTC function(utcdatestring){
var minutemillisecs =60*1000,
      re =new RegExp("([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\.([0-9]{3})([+-])([0-9]{2}):([0-9]{2})","i"),
  m  =re.exec(utcdatestring),

      n  =m.map(parseInt),
  d = Date.UTC(n[1], n[2]-1, n[3], n[4], n[5], n[6], n[7]),
tz = parseInt(m[8] +"1") * ((60 * n[9]) + n[10]) * minutemillisecs,
return new Date(d - tz);
};



Het is aardig om te zien dat met een eenvoudige hulpfunctie/method bestaande code er meteen een stuk vriendelijker uit kan zien.

Geen opmerkingen:

Een reactie posten