Rune Grønkjærs Blog
Abonnér på mit feed

Javascript Date extension

Javascript Date objektet er nok et af de sværeste at arbejde med, da det for de uindviede virker/er meget indviklet. Jeg har ofte haft brug for at kunne abstrahere fra fra denne kompleksitet, med nogle mere enkle metoder. Jeg har derfor skrevet nogle metoder til Date objektet, der kan give nogle pæne oplysninger om den valgte dato. For en fuld reference over alle dateobjektets metoder følg dette link til w3schools.

.getWeekNumber()

Ugenummer er ikke noget der benyttes i ret mange andre lande end Danmark. Derfor understøtter de færreste programmeringssprog ugenumre som standard. GetWeekNumber metoden sørger for at udregne datoens ugenummer.
Date.prototype.getWeekNumber = function() {
  var date = this;
  date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
  var IsoDayOfWeek = date.getDay() == 0 ? 7 : date.getDay(); // Søndag = 7
  date.setDate(date.getDate() + 4 - IsoDayOfWeek); // Ændre til nærmeste torsdag
  var DayOfYear = (date.getTime() - Date.UTC(date.getFullYear(), 0, 1)) / 864e5;
  var week = Math.floor(DayOfYear / 7) + 1;
  return week;
};

//getWeekNumber ekesmpel
var date = new Date();
jQuery("#UgeTest").html("Denne uges nummer: " + date.getWeekNumber());

Resultatet:

.getDayName()

Ugedagens navn har man ofte brug for, når man arbejder med datoer i det hele taget. Min getDayName metode returner netop dette og understøtter også forskellige
Date.prototype.getDayName = function(language) {
  var days = [], supportetLanguages = ["da-DK", "en-US"];
  //Dansk som standard
  //Denne linie benytter en containsmetode på Arrayobjektet, som ikke er med i native koden.
  language = language && supportetLanguages.contains(language) ? language : "da-DK";
  
  //dansk
  days["da-DK"] = [];
  days["da-DK"][0] = "Søndag";
  days["da-DK"][1] = "Mandag";
  days["da-DK"][2] = "Tirsdag";
  days["da-DK"][3] = "Onsdag";
  days["da-DK"][4] = "Torsdag";
  days["da-DK"][5] = "Fredag";
  days["da-DK"][6] = "Lørdag";
  //Engelsk
  days["en-US"] = [];
  days["en-US"][0] = "Sunday";
  days["en-US"][1] = "Monday";
  days["en-US"][2] = "Tuesday";
  days["en-US"][3] = "Wedensday";
  days["en-US"][4] = "Thursday";
  days["en-US"][5] = "Friday";
  days["en-US"][6] = "Saturday";

  return days[language][this.getDay()];
};

//getDayName ekesmpel
var date = new Date();
jQuery("#UgedagTest").html(date.getDayName());

Resultatet:

.getMonthName()

Ligesom ugedagens navn kan det være super praktisk at kunne få månedens navn også.
Date.prototype.getMonthName = function(language) {
  var months = [], supportetLanguages = ["da-DK", "en-US"];

  //Dansk som standard
  //Denne linie benytter en containsmetode på Arrayobjektet, som ikke er med i native koden.
  language = language && supportetLanguages.contains(language) ? language : "da-DK";

  //Dansk
  months["da-DK"] = [];
  months["da-DK"][0] = "Januar";
  months["da-DK"][1] = "Februar";
  months["da-DK"][2] = "Marts";
  months["da-DK"][3] = "April";
  months["da-DK"][4] = "Maj";
  months["da-DK"][5] = "Juni";
  months["da-DK"][6] = "Juli";
  months["da-DK"][7] = "August";
  months["da-DK"][8] = "September";
  months["da-DK"][9] = "Oktober";
  months["da-DK"][10] = "November";
  months["da-DK"][11] = "December";
  //Engelsk
  months["en-US"] = [];
  months["en-US"][0] = "January";
  months["en-US"][1] = "February";
  months["en-US"][2] = "March";
  months["en-US"][3] = "April";
  months["en-US"][4] = "May";
  months["en-US"][5] = "June";
  months["en-US"][6] = "Juli";
  months["en-US"][7] = "August";
  months["en-US"][8] = "September";
  months["en-US"][9] = "Oktober";
  months["en-US"][10] = "November";
  months["en-US"][11] = "December";
  return months[language][this.getMonth()];
};

//getMonthName ekesmpel
var date = new Date();
jQuery("#MaanedNavnTest").html(date.getMonthName());

Resultatet:

.format()

En ægte format metode har javascript Date objektet ikke. Jeg har derfor længe ledt efter en extension, der kan formatere en dato i alle mulige formater. Jeg fandt hvad jeg ledte efter på Steven Levithans blog, hvor man også kan downloade koden.
Steven Levithans udvidelse til Date objektet er ret vildt. Man kan bruge alle de gængse dato formateringskoder. Se bare på eksemplerne herunder.
var now = new Date();
var testTxt = "";
testTxt += '<br /><br />now.format("m/dd/yy"):<br />' + now.format("m/dd/yy");

//Kan også benyttes som en selvstændig metode
testTxt += '<br /><br />dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT")<br />' + dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

// Du kan benytte een af flere navngivne masker
testTxt += '<br /><br />now.format("isoDateTime")<br />' + now.format("isoDateTime");

// ...Eller tilføje dine egne
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
testTxt += '<br /><br />now.format("hammerTime")<br />' + now.format("hammerTime");

// Når man benytter den selvstændige dateFormat metode
// kan du også sende en dato med som string, smart
testTxt += '<br /><br />dateFormat("Jun 9 2007", "fullDate")<br />' + dateFormat("Jun 9 2007", "fullDate");

// Bemærk at hvis du ikke inkludere masken, som parameter,
// vil dateFormat.masks.default blive benyttet
testTxt += '<br /><br />now.format()<br />' + now.format();

// Og hvis du ikke inkluderer en dato som parameter,
// bliver dags dato og tid brugt
testTxt += '<br /><br />dateFormat()<br />' + dateFormat();

// Du kan også springe over dato objektet (så længe din maske ikke
// indeholder tal), hvor dags dato og tid igen vil blive benyttet
testTxt += '<br /><br />dateFormat("longTime")<br />' + dateFormat("longTime");

// Du kan også konvertere en lokal tid til UTC tid. For at gøre dette
// kan du sende true med som parameter (her er det ikke lovligt at springe parametre over):
dateFormat(now, "longTime", true);
testTxt += '<br /><br />now.format("longTime", true)<br />' + now.format("longTime", true);

// ...Eller du kan prefixe UTC: til din maske
testTxt += '<br /><br />now.format("UTC:h:MM:ss TT Z")<br />' + now.format("UTC:h:MM:ss TT Z");
jQuery("#StevenLevithan").html(testTxt);

Resultatet:

Dette indlæg blev skrevet i Date, extension, Javascript, regexp. Føj permalink til favoritter. Følg alle kommentarer her med RSS feedet for dette indlæg. Skriv en kommentar eller smid et trackback: Trackback URL. | Read this in english English version

Smid en kommentar

Your email is never published nor shared. Required fields are marked *

*
*

Du kan benytte disse HTML tags og attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

English version