01. januar 2005 - 14:47Der er
16 kommentarer og 2 løsninger
Dato minus dato
Jeg vil gerne vide hvor lang tid der er gået siden en hvis dato.
Jeg kan jo sagtens finde de to tidspunkters millisekunder siden 1970 og trække dem fra hinanden. Det jeg ikke fatter er, hvordan man kringler skudår, ulige antal dage i måneder og så videre.
var finalDate = new Date(2006, 0, 1, 0, 0, 0); // Næste nytår!! var now = new Date(); var timeToGo = new Date(finalDate-now); var y = timeToGo.getFullYear()-1970; var m = timeToGo.getMonths(); var d = timeToGo.getDate(); var hr = timeToGo.getHours(); var min = timeToGo.getMinutes(); var sec = timeToGo.getSeconds(); trace(y+" år "+m+" måneder "+d+" dage "+hr+" timer "+min+" minutter "+sec+" sekunder");
Du finder jo bare forskellen mellem de to tidspunkter i millisekunder og laver det til et nyt dato-objekt og altså finder ud af, hvor mange år, dage og måneder dette tidsrum svarer til, målt fra 1. januar 1970.
Hvad hvis vi skal finde forskellen mellem 1. februar og 1. marts. Der er præcis 1 måned - hverken mere eller mindre. Men med din metode giver det jo i skudår 0 måneder og 30 dage mens det i ikke-skudår giver 0 måneder og 29 dage - begge dele burde jo giver 1 måned og 0 dage:
var før = new Date(2004,1,1); // 1. februar var efter = new Date(2004,2,1); // 1. marts var forskel = new Date(efter-før); trace("antal måneder: "+forskel.getMonth()); // 0 trace("antal dage: "+forskel.getDate()); // 30 var før = new Date(2005,1,1); // 1. februar var efter = new Date(2005,2,1); // 1. marts var forskel = new Date(efter-før); trace("antal måneder: "+forskel.getMonth()); // 0 trace("antal dage: "+forskel.getDate()); // 29
Derfor er det ikke helt godt nok. Man er nødt til at gå hver enkelt attribut igennem og finde forskellen. Det er lige bøvlet, men jeg finder lige en løsning. :)
Har rodet lidt med det og nogle kalender funktioner jeg har lavet engang:
var d1 = new Date(2005, 3, 8); var d2 = new Date(2005, 4, 2);
function tidsForskel(d1, d2){ var dato1 = new Date(Math.min(d1,d2)); var dato2 = new Date(Math.max(d1,d2)); var years = dato2.getFullYear()-dato1.getFullYear(); var months = dato2.getMonth()-dato1.getMonth(); var days = dato2.getDate()-dato1.getDate(); var hours = dato2.getHours()-dato1.getHours(); var minutes = dato2.getMinutes()-dato1.getMinutes(); var seconds = dato2.getSeconds()-dato2.getSeconds();
Men den tæller ikke tiden. Jeg har smidt dete hele ind i en onClipEvent:
onClipEvent (enterFrame) { var d1 = new Date(1977, 6, 28, 15, 0, 0); var d2 = new Date();
function tidsForskel(d1, d2){ var dato1 = new Date(Math.min(d1,d2)); var dato2 = new Date(Math.max(d1,d2)); var years = dato2.getFullYear()-dato1.getFullYear(); var months = dato2.getMonth()-dato1.getMonth(); var days = dato2.getDate()-dato1.getDate(); var hours = dato2.getHours()-dato1.getHours(); var minutes = dato2.getMinutes()-dato1.getMinutes(); var seconds = dato2.getSeconds()-dato2.getSeconds();
Der var lige en lille fejl med sekunderne: var seconds = dato2.getSeconds()-dato2.getSeconds(); det er jo altid 0, så den går ikke ;)
Brug dette script i stedet - og indsæt det i første frame i dit movieclip med dit tekstfelt, som du giver instance-navnet og ikke variablen "alder" - det er nemlig noget gammelt flash 5 snask!!
var final = new Date(2005, 3, 8);
function tidsForskel(d1, d2){
var dato1 = new Date(Math.min(d1,d2)); var dato2 = new Date(Math.max(d1,d2)); var years = dato2.getFullYear()-dato1.getFullYear(); var months = dato2.getMonth()-dato1.getMonth(); var days = dato2.getDate()-dato1.getDate(); var hours = dato2.getHours()-dato1.getHours(); var minutes = dato2.getMinutes()-dato1.getMinutes(); var seconds = dato2.getSeconds()-dato1.getSeconds();
(her vil jeg fremover søge at samle alle de små guldkorn, som måtte dukke op - hvem som helst kan sådan set oprette artikler her, da jeg har lavet et fint lille online system til det ;))
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.