Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙ Pengaturan Proxy Target

16. februar 2026

Dato og tid

Lad os se pÄ et andet indbygget objekt: Date. Det gemmer datoen, tiden og giver metoder til hÄndtering af dato/tid.

For eksempel kan vi bruge det til at gemme oprettelses-/Êndringstider, mÄle tid eller blot udskrive den nuvÊrende dato.

Oprettelse

For at oprette et nyt Date objekt kalder vi new Date() med en af fĂžlgende argumenter:

new Date()

uden argumenter – opretter et Date objekt med nuvérende dato og tid:

let now = new Date();
alert( now ); // viser nuvĂŠrende dato/tid
new Date(millisekunder)

Opretter et Date objekt med tiden lig med antallet af millisekunder (1/1000 af en sekund) der er gÄet efter 1. januar 1970 UTC+0.

// 0 betyder 01.01.1970 UTC+0
let Jan01_1970 = new Date(0);
alert( Jan01_1970 );

// tilfĂžjer 24 timer, giver 02.01.1970 UTC+0
let Jan02_1970 = new Date(24 * 3600 * 1000);
alert( Jan02_1970 );

Et heltal der reprÊsenterer antallet af millisekunder der er gÄet siden 1. januar 1970 UTC+0 kaldes en timestamp (tidsstempel).

Det er en simpel numerisk reprĂŠsentation af en dato som heltal. Vi kan altid oprette en dato fra et timestamp ved hjĂŠlp af new Date(timestamp) og konvertere et eksisterende Date objekt til et timestamp ved hjĂŠlp af metoden date.getTime() (se nedenfor).

Datoer fĂžr 01.01.1970 har negative timestamps, e.g.:

// 31 Dec 1969
let Dec31_1969 = new Date(-24 * 3600 * 1000);
alert( Dec31_1969 );
new Date(datestring)

Hvis der sendes et enkelt argument og det er en streng, sĂ„ bliver den automatisk fortolket. Algoritmen er den samme som Date.parse bruger – den ser vi pĂ„ senere.

let date = new Date("2017-01-26");
alert(date);
// Tiden er ikke defineret, sÄ det antages at vÊre midnat GMT og
// justeres i forhold til tidszonen hvor koden kĂžres
// SĂ„ resultatet kan vĂŠre
// Thu Jan 26 2017 11:00:00 GMT+1100 (Australian Eastern Daylight Time)
// eller
// Wed Jan 25 2017 16:00:00 GMT-0800 (Pacific Standard Time)
new Date(Är, mÄned, dag, timer, minutter, sekunder, millisekunder)

Opretter et date objekt med de givne komponenter i den lokale tidszone. Kun de fĂžrste to argumenter er obligatoriske.

  • Ă„r skal have 4 tal. For kompatibilitet er to tal ogsĂ„ tilladt og betragtes som 19xx. F.eks. 98 er det samme som 1998. Men, brug af 4 tal er stĂŠrkt anbefalet.
  • mĂ„ned tallet for mĂ„ned starter fra 0 (Jan), op til 11 (Dec).
  • dag parameteren er den aktuelle dag i mĂ„neden. Hvis den ikke gives sĂŠttes den til 1.
  • Hvis timer/minutter/sekunder/millisekunder ikke gives, sĂŠttes de til 0.

For eksempel, for at oprette et Date objekt for 1. januar 2011 kl. 00:00:00, kan vi bruge:

new Date(2011, 0, 1, 0, 0, 0, 0); // 1 Jan 2011, 00:00:00
new Date(2011, 0, 1); // samme resultat, timer osv. er sat til 0 som standard

Maksimal prĂŠcision er 1 ms (1/1000 sekund):

let date = new Date(2011, 0, 1, 2, 3, 4, 567);
alert( date ); // 1.01.2011, 02:03:04.567

TilgÄ de enkelte komponenter i et dato objekt

Der er metoder til at tilgÄ Är, mÄned og sÄ videre fra et Date objekt:

getFullYear()
Henter Ärstallet (4 cifre)
getMonth()
Henter mÄneden, fra 0 til 11.
getDate()
Henter dagen i mÄneden, fra 1 til 31 (Metodens navn er lidt mÊrkeligt).
getHours(), getMinutes(), getSeconds(), getMilliseconds()
Henter de tilsvarende tidskomponenter.
Ikke getYear(), men getFullYear()

Mange JavaScript motorer har implememnteret en ikke-standard metode ved navn getYear(). Denne metode er udfaset. Den returnerer ofte 2-cifret Är. Brug getFullYear() til at hente Ärstallet.

Derudover kan vi ogsÄ fÄ ugedagen:

getDay()
Henter ugedagen, fra 0 (sĂžndag) til 6 (lĂžrdag). Den fĂžrste dag er som standard altid sĂžndag. I Danmark er det mandag der betragtes som fĂžrste ugedag, men det kan ikke ĂŠndres.

Alle metoderne ovenfor returnerer komponenterne i forhold til den lokale tidszone.

Der er ogsÄ deres UTC-modsvar, som returnerer dag, mÄned, Är og sÄ videre for tidszonen UTC+0: getUTCFullYear(), getUTCMonth(), getUTCDay(). Bare indsÊt "UTC" lige efter "get".

Hvis din lokale tidszone er forskellig fra UTC, sÄ viser koden nedenfor forskellige timer:

Hvis din lokale tidszone er forskellig fra UTC, sÄ viser koden nedenfor forskellige timer:

// nuvĂŠrende dato
let date = new Date();

// Timer i den lokale tidszone
alert( date.getHours() );

// Timer i UTC+0 tidszone (London tid uden sommertid)
alert( date.getUTCHours() );

Udover de givne metoder er der to specielle der ikke har en UTC-variant:

getTime()

Returnerer en timestamp for datoen – det antal millisekunder der er gĂ„et fra 1. januar 1970 UTC+0.

getTimezoneOffset()

Returnerer forskellen mellem UTC og den lokale tidszone, i minutter. For eksempel, hvis du er i tidszonen UTC-1, sÄ returnerer den 60 (fordi UTC er 60 minutter foran). Hvis du er i tidszonen UTC+3, sÄ returnerer den -180 (fordi UTC er 180 minutter bagud).:

// hvis du er i tidszonen UTC-1, gives 60
// hvis du er i tidszonen UTC+3, gives -180
alert( new Date().getTimezoneOffset() );

SĂŠt de enkelte komponenter i et dato objekt

De fĂžlgende metoder tillader at sĂŠtte dato/tidskomponenter:

Hver af disse undtaget setTime() har en UTC-variant, for eksempel: setUTCHours().

Som vi kan se, kan nogle metoder sÊtte flere komponenter pÄ én gang, for eksempel setHours. De komponenter der ikke er nÊvnt Êndres ikke.

For eksempel:

let today = new Date();

today.setHours(0);
alert(today); // stadig dagen idag, men timer er ĂŠndret til 0

today.setHours(0, 0, 0, 0);
alert(today); // stadig dagen idag, men tiden er sat til 00:00:00.

Automatisk korrektion

autokorrektion er en praktisk feature af Date objekter. Vi kan sĂŠtte vĂŠrdier uden for det normale interval, og det vil automatisk justere sig.

For eksempel:

let date = new Date(2013, 0, 32); // 32 Jan 2013 ?!?
alert(date); // ...bliver til 1st februar 2013!

Datokomponenter uden for det normale interval distribueres automatisk.

Lad os sige at vi vil forĂžge datoen “28 Feb 2016” med 2 dage. Det kan vĂŠre “2 Mar” eller “1 Mar” i tilfĂŠldet af et skudĂ„r. Vi behĂžver ikke at tĂŠnke over det. Bare tilfĂžj 2 dage. Date objektet vil gĂžre resten:

let date = new Date(2016, 1, 28);
date.setDate(date.getDate() + 2);

alert( date ); // 1. marts 2016

Denne feature er ofte brugt til at fĂ„ datoen efter en given tidsperiode. For eksempel, lad os fĂ„ datoen for “70 sekunder efter nu”:

let date = new Date();
date.setSeconds(date.getSeconds() + 70);

alert( date ); // viser den korrekte dato, 70 sekunder efter nu

Vi kan ogsÄ indstille nul eller endda negative vÊrdier. For eksempel, hvis vi sÊtter dag til nul, sÄ bliver det den sidste dag i den forrige mÄned:

let date = new Date(2016, 0, 2); // 2. januar 2016

date.setDate(1); // sÊt dagen til den 1. i mÄneden
alert( date );

date.setDate(0); // mindste dag er 1, sÄ 0 vil sÊtte den til sidste dag i mÄneden fÞr
alert( date ); // 31. december 2015

Date til tal kan bruges til at trĂŠkke datoer fra hinanden

NÄr et Date objekt konverteres til et tal, bliver det til en timestamp pÄ samme mÄde som date.getTime():

let date = new Date();
alert(+date); // antal millisekunder, samme som date.getTime()

En vigtig sideeffekt: datoer kan trĂŠkkes fra, og resultatet er deres forskel i millisekunder.

Det kan bruges til tidsmÄlinger:

let start = new Date(); // start mÄling af tid

// do the job
for (let i = 0; i < 100000; i++) {
  let doSomething = i * i * i;
}

let end = new Date(); // slut tidsmÄling

alert( `Loopet tog ${end - start} ms at gennemfĂžre` );

Date.now()

Hvis vi kun vil mÄle tid, behÞver vi ikke hele Date objektet.

Der er en speciel metode Date.now() som returnerer den aktuelle timestamp.

Det er det samme som hvis du skriver new Date().getTime(), men det opretter ikke selve Date objektet. PÄ den mÄde er det en hurtigere metode uden at pÄvirke garbage collection.

Det bruges mest fordi det er bekvemmeligt og hvis hastighed er kritisk, som ved udvikling af spil eller andre specialiserede programmer.

SĂ„ viil dette nok vĂŠre bedre:

let start = Date.now(); // millisekunder tĂŠller fra 1. januar 1970

// UdfĂžr en hansling
for (let i = 0; i < 100000; i++) {
  let doSomething = i * i * i;
}

let end = Date.now(); // fĂŠrdig

alert( `Loopet tog ${end - start} ms at gennemfĂžre` ); // trĂŠk de to tal fra hinanden

HastighedsmÄling (benchmarking)

Hvis vi Þnsker en pÄlidelig benchmark af en CPU-intensiv funktion, bÞr vi vÊre forsigtige.

For eksempel, lad os mÄle to funktioner der beregner forskellen mellem to datoer: hvilken er hurtigere?

SĂ„danne ydeevne-mĂ„linger kaldes ofte “benchmarks”.

// Vi har date1 og date2. Hvilken funktion er hurtigere til at returnere forskellen i ms?
function diffSubtract(date1, date2) {
  return date2 - date1;
}

// eller mÄske denne?
function diffGetTime(date1, date2) {
  return date2.getTime() - date1.getTime();
}

Disse to funktioner gÞr prÊcis det samme, men en af dem bruger et eksplicit date.getTime() for at fÄ datoen i millisekunder, og den anden bruger en dato-til-tal konvertering. Deres resultat er altid det samme.

SĂ„, hvilken er hurtigere?

Den fÞrste idé kan vÊre at kÞre dem mange gange i trÊk og mÄle tidsforskellen. For vores tilfÊlde er funktionerne meget simple, sÄ vi skal gÞre det mindst 100000 gange.

Lad os mÄle det:

function diffSubtract(date1, date2) {
  return date2 - date1;
}

function diffGetTime(date1, date2) {
  return date2.getTime() - date1.getTime();
}

function bench(f) {
  let date1 = new Date(0);
  let date2 = new Date();

  let start = Date.now();
  for (let i = 0; i < 100000; i++) f(date1, date2);
  return Date.now() - start;
}

alert( 'Tiden for diffSubtract: ' + bench(diffSubtract) + 'ms' );
alert( 'Tiden for diffGetTime: ' + bench(diffGetTime) + 'ms' );

Wow! Brugen af getTime() er ret meget hurtigere! HovedÄrsagen er at der ikke er nogen konvertering af datatype, det er meget lettere for motorer at optimere.

Okay, vi er pÄ vej med noget. Men det er ikke en god benchmark endnu.

Forestil dig at der, mens bench(diffSubtract) kĂžrer, at CPU’en havde brug for at kĂžre noget parallelt der optog ressourcer. Hvad hvis den opgave sĂ„ var slut i den periode hvor bench(diffGetTime) kĂžrer?

Det er et meget realistisk scenarie i et moderne OS med flere porcesser der kĂžrer samtidig.

Resultatet vil vĂŠre at den fĂžrste benchmark vil have mindre CPU-ressourcer end den anden. Det kan fĂžre til forkerte resultater.

For en mere trovĂŠrdig benchmarking, bĂžr hele bunken af benchmarks blive kĂžrt flere gange.

For eksempel, som dette:

function diffSubtract(date1, date2) {
  return date2 - date1;
}

function diffGetTime(date1, date2) {
  return date2.getTime() - date1.getTime();
}

function bench(f) {
  let date1 = new Date(0);
  let date2 = new Date();

  let start = Date.now();
  for (let i = 0; i < 100000; i++) f(date1, date2);
  return Date.now() - start;
}

let time1 = 0;
let time2 = 0;

// run bench(diffSubtract) and bench(diffGetTime) each 10 times alternating
for (let i = 0; i < 10; i++) {
  time1 += bench(diffSubtract);
  time2 += bench(diffGetTime);
}

alert( 'Total time for diffSubtract: ' + time1 );
alert( 'Total time for diffGetTime: ' + time2 );

Moderne JavaScript motorer er begyndt at udfĂžre avanceret optimering med fokus pĂ„ “hot code” der kĂžrer mange gange – der er sjĂŠldent behov for at optimere kode der bruges sjĂŠldent. SĂ„ i eksemplet ovenfor er de fĂžrste par afviklinger ikke godt optimerede. Vi Ăžnsker mĂ„ske at tilfĂžje en “heat-up” kĂžrsel fĂžr den egentlige benchmark for at fĂ„ mere pĂ„lidelige resultater.:

// TilfĂžj en "opvarming" fĂžr loopet
bench(diffSubtract);
bench(diffGetTime);

// nu til benchmark
for (let i = 0; i < 10; i++) {
  time1 += bench(diffSubtract);
  time2 += bench(diffGetTime);
}
VÊr opmÊrksom pÄ at lave microbenchmarking

Moderne JavaScript motorer udfĂžrer mange optimeringer. De kan godt tweake “artificielle tests” i forhold til “normal brug”, isĂŠr nĂ„r vi benchmarker noget meget lille, som hvordan en operator virker eller en indbygget funktion. SĂ„ hvis du Ăžnsker at forstĂ„ ydeevne, sĂ„ studĂ©r venligst hvordan JavaScript-motoren virker. Og sĂ„ vil du sandsynligvis ikke have brug for microbenchmarks overhovedet.

Der findes en god samling af artikler om V8 pÄ https://mrale.ph.

Date.parse fra en streng

Metoden Date.parse(str) kan lĂŠse en dato fra en streng.

Strengformatet skal vĂŠre: YYYY-MM-DDTHH:mm:ss.sssZ, hvor:

  • YYYY-MM-DD – er datoen: Ă„r-mĂ„ned-dag.
  • Tegnet "T" bruges som separator.
  • HH:mm:ss.sss – er tiden: timer, minutter, sekunder og millisekunder.
  • Den frivillige 'Z' del markerer tidszonen i formatet +-hh:mm. En enkeltkarakter Z vil betyde UTC+0.

Kortere varianter er ogsÄ mulige, f.eks. YYYY-MM-DD eller YYYY-MM eller endda YYYY.

Kaldet til Date.parse(str) tolker strengen i det givne format og returnerer tidsstempel (antal millisekunder fra 1. januar 1970 UTC+0). Hvis formatet er ugyldigt, returneres NaN.

For eksempel:

let ms = Date.parse('2012-01-26T13:51:50.417-07:00');

alert(ms); // 1327611110417  (timestamp)

Vi kan med det samme oprette et new Date objekt fra tidsstempel:

let date = new Date( Date.parse('2012-01-26T13:51:50.417-07:00') );

alert(date);

Opsummering

  • Dato og tid i JavaScript er reprĂŠsenteret med Date objektet. Vi kan ikke oprette “kun dato” eller “kun tid”: Date objekter bĂŠrer altid begge dele.
  • MĂ„neder tĂŠlles fra nul (ja, januar er mĂ„neden 0).
  • Dagen pĂ„ ugen hentes med getDay(). Den er ogsĂ„ talt fra nul (det er sĂžndag).
  • Date autokorrigerer sig selv nĂ„r delkomponenter sĂŠttes. Det er praktisk for at tilfĂžje eller trĂŠkke dage/mĂ„neder/timer fra hinanden.
  • Datoer kan trĂŠkkes fra hinanden, hvilket giver deres forskel i millisekunder. Det skyldes at et Date objekt bliver et tidsstempel nĂ„r det konverteres til et tal.
  • Brug Date.now() for hurtigt at fĂ„ det aktuelle tidsstempel.

BemĂŠrk at, ulig mange andre systemer, er tidsstempel i JavaScript i millisekunder, ikke sekunder.

Nogle gange har vi brug for en mere prÊcis mÄling af tid. JavaScript har ikke en mÄde at mÄle tid i mikrosekunder (1 milliontedel af en sekund), men de fleste miljÞer har det. For eksempel har browseren performance.now() som giver antallet af millisekunder fra starten af sideindlÊsningen med mikrosekund prÊcision (3 cifre efter kommaet):

alert(`Siden blev indlĂŠst for ${performance.now()}ms siden`);
// Noget i stil med: "Siden blev indlĂŠst for 34731.26000000001ms siden"
// .26 er mikrosekunder (260 mikrosekunder)
// mere end 3 cifre efter kommaet er prĂŠcisionsfejl, kun de fĂžrste 3 er korrekte

Node.js har microtime modulet og andre mÄder. NÊsten alle enheder har miljÞer tilgÊngeligt, der tillader stor prÊcision. Teknisk set tillader nÊsten enhver enhed og miljÞ at fÄ mere prÊcise mÄlinger, det er bare ikke i Date.

Opgaver

vigtighed: 5

Opret et Date objekt for datoen: 20. februar 2012 kl. 03:12. Tidszonen er lokal.

Vis det med alert.

new Date konstruktÞren bruger lokal tidszone. SÄ det vigtigste at huske er, at mÄneder starter fra 0.

SĂ„ februar har nummer 1.

Her er et eksempel med tal som dato-komponenter:

//new Date(Är, mÄned, mÄnedsdag, timer, minutter, sekunder, mellisekunder)
let d1 = new Date(2012, 1, 20, 3, 12);
alert( d1 );

Vi kunne ogsÄ oprette en dato fra en streng, som dette:

//new Date(datastring)
let d2 = new Date("2012-02-20T03:12");
alert( d2 );
vigtighed: 5

Skriv en funktion getWeekDay(date) der viser dagen i ugen i forkortet format: ‘Man’, ‘Tir’, ‘Ons’, ‘Tors’, ‘Fre’, ‘Lþr’, ‘Sþn’.

For eksempel:

let date = new Date(2014, 0, 3);  // 3. januar 2014
alert( getWeekDay(date) );        // Skal skrive "Fre

Åbn en sandbox med tests.

Metoden date.getDay() returnerer nummeret af dagen, der starter med sĂžndag.

Lad os lave et array af dage, sÄ vi kan fÄ den rigtige dagnavn efter nummeret:

function getWeekDay(date) {
  let days = ['SĂžn', 'Man', 'Tir', 'Ons', 'Tors', 'Fre', 'LĂžr'];

  return days[date.getDay()];
}

let date = new Date(2014, 0, 3); // 3. januar 2014
alert( getWeekDay(date) ); // Fre

Åbn lþsningen med tests i en sandbox.

vigtighed: 5

EuropĂŠiske lande starter med mandag (nummer 1), sĂ„ tirsdag (nummer 2) og sĂ„ videre indtil sĂžndag (nummer 7). Skriv en funktion getLocalDay(date) der returnerer “EuropĂŠisk” ugedag for date.

let date = new Date(2012, 0, 3);  // 3. januar 2012
alert( getLocalDay(date) );       // tirsdag, should show 2

Åbn en sandbox med tests.

function getLocalDay(date) {

  let day = date.getDay();

  if (day == 0) { // ugedage 0 (sĂžndag) er 7 i europĂŠiske lande
    day = 7;
  }

  return day;
}

Åbn lþsningen med tests i en sandbox.

vigtighed: 4

Skriv en funktion getDateAgo(date, days) der returnerer dagen for days dage siden fra date.

For eksempel, hvis idag er den 20de, sÄ skal getDateAgo(new Date(), 1) vÊre den 19de og getDateAgo(new Date(), 2) vÊre den 18de.

Skal virke pÄ en pÄlitelig mÄde for days=365 eller mere:

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

P.S. Funktionen skal ikke ĂŠndre den givne date.

Åbn en sandbox med tests.

Ideen er simpel: at trĂŠkke det givne antal af dage fra date:

function getDateAgo(date, days) {
  date.setDate(date.getDate() - days);
  return date.getDate();
}


men funktionen skal ikke éndre den givne date. Det er en vigtig ting, fordi den ydre kode, der giver os datoen, ikke forventer, at den éndres.

For at implementere det skal vi klone datoen, sÄdan her:

function getDateAgo(date, days) {
  let dateCopy = new Date(date);

  dateCopy.setDate(date.getDate() - days);
  return dateCopy.getDate();
}

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

Åbn lþsningen med tests i en sandbox.

vigtighed: 5

Skriv en funktion getLastDayOfMonth(year, month) der returnerer den sidste dag i mÄned. Som givet kan det vÊre den 30de, 31de eller 28/29 for Feb.

Parametre:

  • year – fire-sifret Ă„r, for eksempel 2012.
  • month – mĂ„ned, fra 0 til 11.

For eksempel, getLastDayOfMonth(2012, 1) = 29 (skudÄr, februar).

Åbn en sandbox med tests.

Lad os oprette en datoen med nÊste mÄned, men overfÞr 0 som dagen:

function getLastDayOfMonth(year, month) {
  let date = new Date(year, month + 1, 0);
  return date.getDate();
}

alert( getLastDayOfMonth(2012, 0) ); // 31
alert( getLastDayOfMonth(2012, 1) ); // 29
alert( getLastDayOfMonth(2013, 1) ); // 28

Normalt starter datoen fra 1, men vi kan overfĂžre enhver tal, datoen vil autoadjust sig selv. SĂ„ nĂ„r vi overfĂžrer 0, betyder det “en dag fĂžr den fĂžrste dag i mĂ„ned”, i anden ord: “den sidste dag i den forrige mĂ„ned”.

Åbn lþsningen med tests i en sandbox.

vigtighed: 5

Skriv en funktion getSecondsToday() der returnerer antallet af sekunder fra starten af dagen i dag.

For eksempel, hvis nu var 10:00 am, og der var ikke en skudskift, sÄ:

getSecondsToday() == 36000 // (3600 * 10)

Funktionen skal fungere for enhver dag. Det betyder, at den ikke kan have en fast indsat vĂŠrdi af dagen i dag.

For at fĂ„ antallet af sekunder, kan vi generere en datoen med den nuvĂŠrende dag og tid 00:00:00, sĂ„ kan vi subtrahere det fra “nu”.

Differensen er antallet af millisekunder fra starten af dagen, der skal divideres med 1000 for at fÄ sekunder:

function getSecondsToday() {
  let now = new Date();

  // opret et objekt med den nuvÊrende dag/mÄned/Är
  let today = new Date(now.getFullYear(), now.getMonth(), now.getDate());

  let diff = now - today; // forskel i millisekunder
  return Math.round(diff / 1000); // omdan til sekunder
}

alert( getSecondsToday() );

En anden lÞsning ville vÊre at fÄ timer/minutes/seconds og konvertere dem til sekunder:

function getSecondsToday() {
  let d = new Date();
  return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
}

alert( getSecondsToday() );
vigtighed: 5

Skriv en funktion getSecondsToTomorrow() der returnerer antallet af sekunder fra starten af dagen i morgen.

For eksempel, hvis tiden nu var 23:00, sÄ:

getSecondsToTomorrow() == 3600

P.S. Funktionen skal fungere for enhver dag, dagen i dag er ikke fastsat.

For at fĂ„ antallet af millisekunder til morgen, kan vi fra “morgens 00:00:00” subtrahere den nuvĂŠrende dags tidsstempel.

FĂžrst genererer vi den “morgens”, og sĂ„ gĂžr vi det:

function getSecondsToTomorrow() {
  let now = new Date();

  // imorgens tidsstempel
  let tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate()+1);

  let diff = tomorrow - now; // forskel i millisekunder
  return Math.round(diff / 1000); // konverter til sekunder
}

Alternative lĂžsning:

function getSecondsToTomorrow() {
  let now = new Date();
  let hour = now.getHours();
  let minutes = now.getMinutes();
  let seconds = now.getSeconds();
  let totalSecondsToday = (hour * 60 + minutes) * 60 + seconds;
  let totalSecondsInADay = 86400;

  return totalSecondsInADay - totalSecondsToday;
}

BemÊrk, at mange lande har sommer tid (DST), sÄ der kan vÊre dage med 23 eller 25 timer. Vi kan Þnske at behandle sÄdanne dage separat.

vigtighed: 4

Skriv en funktion formatDate(date) der formaterer date som fĂžlger:

  • Hvis date er givet for under en sekund siden, sĂ„ skal den returnere "lige nu".
  • Hvis date er givet for under en minut siden, sĂ„ skal den returnere "n sekunder siden".
  • Hvis date er givet for under en time siden, sĂ„ skal den returnere "m minutter siden".
  • Hvis date er givet for under en dag siden, sĂ„ skal den returnere "DD.MM.YY HH:mm".

For eksempel:

alert( formatDate(new Date(new Date - 1)) ); // "lige nu"

alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 sekunder siden"

alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 minutter siden"

// En dag siden
alert( formatDate(new Date(new Date - 86400 * 1000)) );

Åbn en sandbox med tests.

For at fĂ„ tiden fra date til nu – trĂŠkker vi den givne dato fra den nuvĂŠrende.

function formatDate(date) {
  let diff = new Date() - date; // forskel i millisekunder

  if (diff < 1000) { // under en sekund
    return 'lige nu';
  }

  let sec = Math.floor(diff / 1000); // konverter forskellen til sekunder

  if (sec < 60) {
    return sec + ' sekunder siden';
  }

  let min = Math.floor(diff / 60000); // konverter forskellen til minutter
  if (min < 60) {
    return min + ' minutter siden';
  }

  // formater dato
  // tilfÞj foranstÄende nuller til en-sifret dag/mÄned/timer/minutes
  let d = date;
  d = [
    '0' + d.getDate(),
    '0' + (d.getMonth() + 1),
    '' + d.getFullYear(),
    '0' + d.getHours(),
    '0' + d.getMinutes()
  ].map(component => component.slice(-2)); // tag de sidste 2 cifre af hvert komponent

  // flet komponenterne sammen til en dato
  return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
}

alert( formatDate(new Date(new Date - 1)) ); // "lige nu"

alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 sekunder siden"

alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 minutter siden"

// GÄrsdagens dato, fx 31.12.2016 20:00
alert( formatDate(new Date(new Date - 86400 * 1000)) );

Alternative lĂžsning:

function formatDate(date) {
  let dayOfMonth = date.getDate();
  let month = date.getMonth() + 1;
  let year = date.getFullYear();
  let hour = date.getHours();
  let minutes = date.getMinutes();
  let diffMs = new Date() - date;
  let diffSec = Math.round(diffMs / 1000);
  let diffMin = diffSec / 60;
  let diffHour = diffMin / 60;

  // formatering
  year = year.toString().slice(-2);
  month = month < 10 ? '0' + month : month;
  dayOfMonth = dayOfMonth < 10 ? '0' + dayOfMonth : dayOfMonth;
  hour = hour < 10 ? '0' + hour : hour;
  minutes = minutes < 10 ? '0' + minutes : minutes;

  if (diffSec < 1) {
    return 'lige nu';
  } else if (diffMin < 1) {
    return `${diffSec} sekunder siden`
  } else if (diffHour < 1) {
    return `${diffMin} minutter siden`
  } else {
    return `${dayOfMonth}.${month}.${year} ${hour}:${minutes}`
  }
}

Åbn lþsningen med tests i en sandbox.

Tutorial-oversigt

Kommentarer

lés dette fþr du kommenterer

  • Hvis du har forslag til forbedringer - sĂ„ opret venligst et GitHub-issue eller en pull request i stedet for at kommentere.
  • Hvis du ikke forstĂ„r noget i artiklen - sĂ„ uddyb venligst.
  • For at indsĂŠtte fĂ„ ord kode, brug <code>-taggen, for flere linjer - omslut dem i <pre>-tag, for mere end 10 linjer - brug en sandbox (plnkr, jsbin, codepen
)