Avatar billede shjorth Nybegynder
24. december 2011 - 11:58 Der er 16 kommentarer og
1 løsning

JS ændre variabel til korrekt dato format

Hejsa.

Jeg har lavet en funktion i JS så skal returnere en dato ud fra en start dato og så et antal dage der skal ligges til.
Det hele køres gennem en løkke, og resultatet bliver at idags dato bliver lagt til det antal dage der skal ligges til.

fRes = res+'-'+month+'-'+year;

Problemet er jo selvsagt at hvis man vælger den 31 og ligger 2 dage til, så bliver resultatet den 33-12-2011.

Er der nogen der kender en god funktion som så kan lave det om til den 2-1-2012

På forhånd tak :)
Avatar billede erikjacobsen Ekspert
24. december 2011 - 12:21 #1
Du kan sådan set bare bruge Date-objektet:

  alert(new Date(2011,12,33));
Avatar billede shjorth Nybegynder
24. december 2011 - 12:30 #2
Det har jeg også forsøgt:

alert(new Date(dateVar));

Det returnerer blot "Invalid date"

Jeg tænker om der måske er en funktion i stil med

dateVar = 31-12-2011
date = dateVar+3

res = 3-1-2012
Avatar billede Slettet bruger
24. december 2011 - 12:34 #3
Prøv at indsætte datoen som 3 parameter, præcist som @erikjacobsen har gjort i #1.

For det første så skal du huske på at ikke alle bruger dd-mm-yyyy format, og inden for programmering virker det format næsten aldrig!

Dernæst kan du ikke plusse 3 til en streng ("31-12-2011").
Plus de 3 til dagen istedet.
Avatar billede shjorth Nybegynder
24. december 2011 - 12:38 #4
Ja for søren det gjorde forskellen.

Nu er det resultat jeg får så et format der ser sådan her ud:
Sat Dec 24 2011 00:00:00 GMT+0100

Hvis jeg nu vil have det lavet om til et simpelt 24-12-2011, er der så en smart metode der ?
Avatar billede Slettet bruger
24. december 2011 - 12:41 #5
Avatar billede shjorth Nybegynder
24. december 2011 - 12:46 #6
Flg endte med er virke super:

Date.prototype.toDDMMYYYYString = function () {return isNaN (this) ? 'NaN' : [this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getFullYear()].join('/')}

alert (new Date().toDDMMYYYYString())

Takker for hjælpen, smider i et svar ?

God jul og godt nytår herfra :)
Avatar billede shjorth Nybegynder
24. december 2011 - 12:50 #7
Der var jeg lige for hurtig.. IE siger NaN men FF returnerer det rigtige :(
Avatar billede erikjacobsen Ekspert
24. december 2011 - 12:58 #8
Hvilken IE siger det? Så vidt jeg lige kan se er det OK.
Avatar billede Slettet bruger
24. december 2011 - 13:01 #9
Kan ikke svare på hvorfor IE gir NaN, men du kan evt. tjekke MSDN's JS reference af Date klassen.

Hvis du har angivet datoen som 3 parameter som @erikjacobsen skrev i #1, så ville jeg også give ham ret i at det burde virke.
Avatar billede shjorth Nybegynder
24. december 2011 - 13:00 #10
Den version jeg har testet med er IE 8
Avatar billede shjorth Nybegynder
24. december 2011 - 13:10 #11
Jeg har gjort flg:

fRes = year+','+month+','+res;
Date.prototype.toDDMMYYYYString = function () {return isNaN (this) ? 'NaN' : [this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getFullYear()].join('-')}
alert(new Date(fRes).toDDMMYYYYString());

og ja FF virker fint, men IE er på tværs som altid
Avatar billede Slettet bruger
24. december 2011 - 13:14 #12
Det du har gjort er at indsætte én parameter som en streng.
Det du burde gøre er at indsætte 3 tal parametrer.

Ala dette:
new Date(year, month, res);
Avatar billede Slettet bruger
24. december 2011 - 13:20 #13
Hvis du absolut vil angive datoen som en streng skal den angives med bindestreger og ikke kommaer.

Altså noget ala dette:
fRes = year + "-" + month + "-" res;
Avatar billede shjorth Nybegynder
24. december 2011 - 13:20 #14
Nu gjorde jeg sådan her:
new Date(year,month,res).toDDMMYYYYString()

Men af en eller anden besynderlig årsag så lagde den +1 til måneden.

Det har jeg afhjulpet ved at gøre flg:
new Date(year,(month-1),res).toDDMMYYYYString()

Bare af ren nysgerrighed, hvordan kan det være den gør det?

Ihvertfald så virker det nu præcis som det skal, så jeg takker endnu engang
Avatar billede Slettet bruger
24. december 2011 - 13:23 #15
#13: Når du angiver år, månede og dag separat, så læser den 0 som Januar og 11 som December.

Quote fra MSDN:
month - Required. The month as an integer between 0 and 11 (January to December).
Avatar billede Slettet bruger
24. december 2011 - 13:24 #16
Glad for du fik det til at virke!
Du får et svar fra mig her..

Og så god jul! :-)
Avatar billede shjorth Nybegynder
24. december 2011 - 13:33 #17
Takker igen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester