Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Brza obrada RFC 3339 datuma u javascript-u

od strane Topper-a 13. avgusta, 2009.

U Motionbox-u , u nekim podacima koje uzvraćamo, koristimo RFC 3339 format datuma. Inače, Javascript ne rukuje ovim formatom sa Date.parse. Jedinu poruku na blogu koju sam video na tu temu je sledeća:

http://dansnetwork.com/2008/11/01/javascript-iso8601rfc3339-date-parser/

Kako god, budući da je to redovan način za raščlanjivanje nizova, ponekad može biti sporiji (ali ne preeeeviše loše... 1000 iteracija na kodu iz bloga gore je <100 milisekundi u IE7 (~ 40 milisekundi u Firefox-u na macbook pro).

Znao sam da sa podelama možemo i bolje. Sa mojim kodom ispod, dobio sam 60% brže poslovanje (tako da je iz koda gore, za rad potrebno 40% vremena).

JavaScript:
  1. Date.prototype.setRFC3339 = function(dString){ 
  2.                 var utcOffset, offsetSplitChar;
  3.                 var offsetMultiplier = 1;
  4.                 var dateTime = dString.split("T");
  5.                 var date = dateTime[0].split("-");
  6.                 var time = dateTime[1].split(":");
  7.                 var offsetField = time[time.length - 1];
  8.                 var offsetString;
  9.                 offsetFieldIdentifier = offsetField.charAt(offsetField.length - 1);
  10.                 if (offsetFieldIdentifier == "Z") {
  11.                     utcOffset = 0;
  12.                     time[time.length - 1] = offsetField.substr(0, offsetField.length - 2);
  13.                 } else {
  14.                     if (offsetField[offsetField.length - 1].indexOf("+") != -1) {
  15.                         offsetSplitChar = "+";
  16.                         offsetMultiplier = 1;
  17.                     } else {
  18.                         offsetSplitChar = "-";
  19.                         offsetMultiplier = -1;
  20.                     }
  21.                     offsetString = offsetField.split(offsetSplitChar);
  22.                     time[time.length - 1] == offsetString[0];
  23.                     offsetString = offsetString[1].split(":");
  24.                     utcOffset = (offsetString[0] * 60) + offsetString[1];
  25.                     utcOffset = utcOffset * 60 * 1000;
  26.                 }
  27.                
  28.                 this.setTime(Date.UTC(date[0], date[1] - 1, date[2], time[0], time[1], time[2]) + (utcOffset * offsetMultiplier ));
  29.                 return this;
  30.             };




Published (Last edited): 09-04-2013 , source: http://blog.toppingdesign.com/2009/08/13/fast-rfc-3339-date-processing-in-javascript/