Jeg har en masse SO´s. Hvor jeg gerne vil læse nogle valgt inde for en bestem date-range. De har allesammen navnet d_2004-08-18, d_2004-08-19 o.sv.- Er det ghodt nok?
Hvordan finder jeg dem som er indenfor min 2 valgte datoer og hvordan sorterer jeg dem rigtigt så de kommer i rækkefølge.
Du kan bruge sort() til at sortere et array, så hvis du smider din datoer ind i et sådan, kan du snildt få orden på dem:
var mitArray:Array = new Array("d_2004-08-18","d_2003-11-31", "d_2004-08-20","d_2004-08-19","d_2004-10-01"); trace(mitArray.sort());
Du kan i princippet også bruge sort til at validere om en dato ligger inden for et bestemt interval. Hvis du laver et array med dine til- og fra-datoer på de to første pladser og derefter push'er den dato du vil tjekke til arrayet, kan du ved at sort()'e på det, se om datoen er indenfor - det er den, hvis den bliver placeret i midten.
Rigtigt nok, men if-sætningernes > og < virker kun på tal, og fucker pænt op med datokonverteringer hvor der optræder bindestreger eller andre specialtegn. Valget for dig står derfor imellem at strippe dine datoer for specialtegn og tjekke dag for dag, måned for måned og år for år, eller bruge mit sort()-forslag. (Jeg skal ikke udelukke at der er en bedre og hurtigere måde at gøre det på, men så kan jeg ikke selv lige gennemskue den!)
det er ikke noget problem at strippe bindestregerne - jeg kan også godt udelade dem. d_ foran bliver dog stående - Men det kan jo også strippes når der tjekkes.
function f(t) { return t < 10 ? "0" + t : t; } function mellemDatoer(fra, til) { var ret = new Array(); fra = new Date(fra.getFullYear(), fra.getMonth(), fra.getDate()); til = new Date(til.getFullYear(), til.getMonth(), til.getDate()); for (; fra <= til; fra.setTime(fra.getTime() + 86400000)) { ret.push(eval("d_" + fra.getFullYear() + "_" + f(fra.getMonth() + 1) + "_" + f(fra.getDate()))); } return ret; } var d_2004_08_17 = "17"; var d_2004_08_18 = "18"; var d_2004_08_19 = "19"; var d_2004_08_20 = "20"; var d_2004_08_21 = "21"; trace(mellemDatoer(new Date(2004, 7, 18), new Date(2004, 7, 20)));
Men så du jo ikke en liste af samtlige datoer i intervallet? Jeg forstår det som: giv mig en liste af samtlige objekter hørende til datoerne mellem a og b.
Ok, sådan forstod jeg det ikke helt. Men piratpolle må lige træde til og sige om han har fået det han søgte.....
Synes godt om
Ny brugerNybegynder
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.