Avatar billede para7 Nybegynder
05. maj 2003 - 12:15 Der er 16 kommentarer og
1 løsning

Sammenligning af datoer

Hvordan kan man sammenligne disse to datoer mht. ældre og nyere. Tilsyneladende sammenlignes kun på de to første karakterer:

    Dato1 = "05-06-2003"
    Dato2 = "08-05-2003"
    if Dato1 > Dato2 then
    response.write "Dato1 > Dato2"
    end if
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 12:18 #1
Dato1 = "2003-06-05"
    Dato2 = "2003-05-08"
    if Dato1 > Dato2 then
    response.write "Dato1 > Dato2"
    end if
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 12:19 #2
Hejsa! ;)

Brug DateDiff:

Dato1 = "05-06-2003"
Dato2 = "08-05-2003"
if DateDiff("d",dato1,dato2) > 0 then
    response.write "Dato1 > Dato2"
else
    Response.Write "Dato1 < Dato2"
End If

Mvh,

Thomas Regin.
Avatar billede para7 Nybegynder
05. maj 2003 - 13:06 #3
erikjacobsen >
Det virker jo fint, men så skal jeg omrokere på dk datoformatet. Eller er der en anden mulighed?
Avatar billede para7 Nybegynder
05. maj 2003 - 13:11 #4
thomas regin >
Det ville da være lækkert om man bare kunne trække dem fra hinanden. Jegkan ikke få det til at virke ordentligt. Det du skriver beregner kun for datoen ikke måned og år.
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 13:13 #5
Det var li'så meget for at vise dig hvad du gjorde galt...

Om du vil arbejde på datoer på den ene eller anden form er jo op til dig,
men andre end lige ASP/Access arbejder man internt med "2003-.....", og
vælger kun andet format når det skal vises for brugeren. Det sparer efter
min mening en masse besvær.
Avatar billede para7 Nybegynder
05. maj 2003 - 13:19 #6
erikjacobsen >
Tak. Kender du en let metode til at vende datostrengen frem og tilbage?
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 13:21 #7
Hejsa igen!..

Den version jeg skrev til dig, beregner hvor mange dage, at Dato1 er større end Dato2.

Andre muligheder er:

yyyy - Year
q - Quarter
m - Month
y - Day of year
d - Day
w - Weekday
ww - Week of year
h - Hour
n - Minute
s - Second

F.eks:

if DateDiff("s",Dato1, Dato2) > 0 then
    Response.Write "Dato1 er større end dato2"
End If

Dennne checker, på sekunder, som Dato1 er større end Dato2

Det burde virke fint, men jeg ved jo heller ikke hvad du skal bruge det til! ;)

Problemet er, at du ikke umiddelbart kan gøre som Erik siger, da du ikke kan trække 2 strings fra hinanden!

Det ville svare til et regnestykke som dette:

2 katte + 1 hund * 4 kanariefugle = ??????

Derfor bliver du nødt til at bruge en funktion, som kan omdanne tekst til datoer! Du kan også muligvis prøve:

if cdate(Dato1) > cdate(Dato2) then
    Response.WRite "Dato 1 er større end dato 2"
End If

Mvh,

Thomas Regin.
Avatar billede para7 Nybegynder
05. maj 2003 - 13:28 #8
Thomas >
det prøver jeg lige. Et opslag påemnet lyder lovende:
CDate recognizes date formats according to the locale setting of your system. The correct order of day, month, and year may not be determined if it is provided in a format other than one of the recognized date settings. In addition, a long date format is not recognized if it also contains the day-of-the-week string.
Avatar billede para7 Nybegynder
05. maj 2003 - 13:36 #9
Jamm det virker jo perfekt, det du tilsidst fandt frem til Thomas. Tak for det. :)
Avatar billede para7 Nybegynder
05. maj 2003 - 13:39 #10
selvom jeg nok ikke helt fik forklaret ordentligt..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 13:45 #11
"according to the locale setting of your system" er det der måske vil give
dig grå hår i hovedet en gang i fremtiden *g* - god fornøjelse
Avatar billede para7 Nybegynder
05. maj 2003 - 13:55 #12
Yes..
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 13:57 #13
/agree wholeheartedly ErikJacobsen! ;)

Det bliver et helvede for dig at bruge Cdate i længden. Derfor anbefaler jeg dig at lave en lille funktion, som du i fremtiden kører alle dine datoer igennem, for at sikre, at de altid står i den "rigtige" rækkefølge, for ellers vil Cdate stå af!..

Denne funktion herunder er lige lavet "on top of my head".. Har ikke testet den.

function convertDates(myDate)
    myDay = day(myDate)
    myMonth = month(myDate)
    myYear = year(myDate)

    if myDay > 12 then
      myDay = myMonth
      myMonth = myDay
    End if
    myNewDate = myDay & "/" & myMonth & "/" & myYear
    convertDates = cdate(myNewDate)
End Function

<%
  if (convertDates(Dato1) > convertDates(Dato2)) then
      Response.Write "Dato1 er større end Dato2"
  End If
%>

Tak for pointene.

/thomas regin.
Avatar billede -mundi- Nybegynder
05. maj 2003 - 13:58 #14
lav session.lcid=1030 for at sikre dig at det altid er Dansk datoformat
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 14:00 #15
Mundi,

Det hjælper ikke, hvis input dato-formatet pludselig ændrer sig!

/thomas.
Avatar billede -mundi- Nybegynder
05. maj 2003 - 14:02 #16
nej det har du da ret i, men hvorfor skulle det dog ændre sig ? Og hvis det gør er para7 vel selv klar over det, idet det er ham der laver koden ?
Avatar billede thomas_regin Nybegynder
05. maj 2003 - 14:06 #17
Ja, helt sikkert.. Men af egen bitter erfaring ved jeg, at dato-formater er et helvede i ASP. Personligt har jeg oprettet en .Net webservice, som jeg sender alle mine datoer til, som returnerer en dato i følgende format: "05/may/2003".

På den måde, er man 100% sikker på hvilken parameter er dag, måned og år. Dette er desuden standard tidsformat i SQL-server, så jeg slår 2 fluer med ét smæk! ;)

Mvh,

/thomas regin.
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
Kurser inden for grundlæggende programmering

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