|
| Sammenligne datoer Fra : Nederbasse |
Dato : 15-06-06 11:28 |
|
Jeg har problemer med at får vist dato i DK format fra en Mysql db og
samtidig kun få vist de rows hvor datoen er fra i dag eller nyerer
Datoen i dag:
$idag = date("Y-m-d");
Min select:
SELECT id, date_format(laan_fra, '%d-%m-%Y') as dk_laan_fra,
date_format(laan_til, '%d-%m-%Y') as dk_laan_til, bem, laan FROM udlaan
WHERE laan = 'Sony' OR laan = 'Nikon' AND laan_til >= '$idag'
Hvis jeg echo'er $idag bliver den skrevet som 2006-06-15 altså samme format
som i databasen alligevel bliver datoer før dd. vist
Datoen på siden bliver cist som 15-06-2006 når jeg bruger denne select
Hvordan får jeg kun ny datoer ?
Lars N
| |
JD (15-06-2006)
| Kommentar Fra : JD |
Dato : 15-06-06 12:28 |
|
> Min select:
> SELECT id, date_format(laan_fra, '%d-%m-%Y') as dk_laan_fra,
> date_format(laan_til, '%d-%m-%Y') as dk_laan_til, bem, laan FROM udlaan
> WHERE laan = 'Sony' OR laan = 'Nikon' AND laan_til >= '$idag'
Hvilken type er laan_til?
Udskift $idag med NOW():
SELECT id, date_format(laan_fra, '%d-%m-%Y') as dk_laan_fra,
date_format(laan_til, '%d-%m-%Y') as dk_laan_til, bem, laan FROM udlaan
WHERE laan = 'Sony' OR laan = 'Nikon' AND laan_til >= DATE(NOW())
Når det er sagt, er DK format så ikke dd/mm-yyyy? Personligt vælger jeg
altid yyyy-mm-dd, da den er sorterings venlig.
| |
Bertel Lund Hansen (15-06-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 15-06-06 13:16 |
|
JD skrev:
> Når det er sagt, er DK format så ikke dd/mm-yyyy?
Det har jeg lært for en generation siden, men man ser andre
formater i dag, f.eks. dd.mm.yyyy.
> Personligt vælger jeg
> altid yyyy-mm-dd, da den er sorterings venlig.
Det er også en dansk standard (faktisk en ISO-standard), og der
er firmaer der bruger den i hele koncernen.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Nederbasse (15-06-2006)
| Kommentar Fra : Nederbasse |
Dato : 15-06-06 13:56 |
|
"JD" <jonh@doe.xyz> skrev i en meddelelse news:e6rg0p$rgc$1@nntp.aioe.org...
> > Min select:
> > SELECT id, date_format(laan_fra, '%d-%m-%Y') as dk_laan_fra,
> > date_format(laan_til, '%d-%m-%Y') as dk_laan_til, bem, laan FROM udlaan
> > WHERE laan = 'Sony' OR laan = 'Nikon' AND laan_til >= '$idag'
>
> Hvilken type er laan_til?
>
> Udskift $idag med NOW():
>
Datoen 20-01-2006 vises stadig med DATA(NOW))
laan_til og laan_fra er af typen date
Lars N
| |
JD (15-06-2006)
| Kommentar Fra : JD |
Dato : 15-06-06 17:48 |
|
>> > Min select:
>> > SELECT id, date_format(laan_fra, '%d-%m-%Y') as dk_laan_fra,
>> > date_format(laan_til, '%d-%m-%Y') as dk_laan_til, bem, laan FROM udlaan
>> > WHERE laan = 'Sony' OR laan = 'Nikon' AND laan_til >= '$idag'
>>
>> Hvilken type er laan_til?
>> Udskift $idag med NOW():
>>
> Datoen 20-01-2006 vises stadig med DATA(NOW))
> laan_til og laan_fra er af typen date
Det giver ingen mening med mindre uret på din server går forkert eller
indholdet af laan_til på anden vis er forkert?
Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
| |
Martin (15-06-2006)
| Kommentar Fra : Martin |
Dato : 15-06-06 20:14 |
|
JD wrote:
> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
Prøv med CUR_DATE() istedet for NOW()
NOW() returner også tidspunktet, og efter et par tests, så virker det
bedst med CUR_DATE() istedet.
CUR_DATE() til date felter
og NOW() til datetime felter
det er sådan set hvad jeg har oplevet.
| |
Nederbasse (16-06-2006)
| Kommentar Fra : Nederbasse |
Dato : 16-06-06 09:49 |
|
>
> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
>
Bruger jeg denne select vises der intet
Her er et udsnit fra tabellen udlaan:
laan_fra laan_til laan
---------------------------------------------
2006-05-20 2006-05-21 Sony
2006-05-20 2006-05-21 Nikon
2006-06-25 2006-06-30 Sony
2006-06-25 2006-06-30 Nikon
2006-06-10 2006-06-11 cykel 1
2006-06-14 2006-06-15 cykel 2
2006-06-14 2006-06-15 Pc1
2006-06-18 2006-06-22 Pc2
2006-06-26 2030-06-20 Optoma
| |
JD (16-06-2006)
| Kommentar Fra : JD |
Dato : 16-06-06 11:26 |
|
>> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
>>
> Bruger jeg denne select vises der intet
>
> Her er et udsnit fra tabellen udlaan:
> laan_fra laan_til laan
> ---------------------------------------------
> 2006-05-20 2006-05-21 Sony
> 2006-05-20 2006-05-21 Nikon
> 2006-06-25 2006-06-30 Sony
> 2006-06-25 2006-06-30 Nikon
> 2006-06-10 2006-06-11 cykel 1
> 2006-06-14 2006-06-15 cykel 2
> 2006-06-14 2006-06-15 Pc1
> 2006-06-18 2006-06-22 Pc2
> 2006-06-26 2030-06-20 Optoma
Så må du jo debugge lidt og lave din query så simpel som overhovedet mulig
og så bygge på efterhånden.
Hvis du laver en:
"SELECT laan_til, CURDATE() FROM udlaan"
Har du et unikt felt i tabellen - f.eks. en unsigned auto increment integer
eller lignende? Jeg vil altid anbefale sådan et felt, da man bør kunne
identificere en given række ud fra sådan et unikt ID og den er også god at
have i tilfælde af debug.
id, laan_til, laan
-----------------------------------
1 2006-05-21 Sony
2 2006-05-21 Nikon
3 2006-06-30 Sony
4 2006-06-30 Nikon
5 2006-06-11 cykel 1
6 2006-06-15 cykel 2
7 2006-06-15 Pc1
8 2006-06-22 Pc2
9 2030-06-20 Optoma
| |
Nederbasse (16-06-2006)
| Kommentar Fra : Nederbasse |
Dato : 16-06-06 13:27 |
|
"JD" <jonh@doe.xyz> skrev i en meddelelse
news:44928722$0$60783$157c6196@dreader1.cybercity.dk...
> >> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
> >>
> >
Med denne
SELECT laan_til, CURDATE() FROM udlaan WHERE laan ='Sony'
vises der 1 lån på siden med dagens dato
datoformatet er 2006-07-16
Jeg ved godt det kan være lige meget hvilket format datoer har men nu er det
blevet en princip sag
Lars
| |
JD (16-06-2006)
| Kommentar Fra : JD |
Dato : 16-06-06 13:41 |
|
>> >> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
>> >>
> SELECT laan_til, CURDATE() FROM udlaan WHERE laan ='Sony'
> vises der 1 lån på siden med dagens dato
> datoformatet er 2006-07-16
Du mener vel 2006-06-16? Men er det så korrekt eller ej? I.flg. din
tidligere tabel er der to rækker med "Sony". Enten fortæller du kun
halvdelen af sandheden eller også er din MySQL server helt hen i skoven.
> Jeg ved godt det kan være lige meget hvilket format datoer har men nu er
> det
> blevet en princip sag
Du snakker sort I ovenstående eksempel viser den bare standard MySQL
formatet, yyyy-mm-dd, og det er fuldstændigt underordnet. Jeg synes ikke du
skal koncentrere dig om dét lige p.t. da du altid kan ændre formatet, når du
en gang får de rigtige rækker ud af databasen.
Hvad med det unikke ID felt - har du sådan ét?
| |
Nederbasse (16-06-2006)
| Kommentar Fra : Nederbasse |
Dato : 16-06-06 21:44 |
|
--
<LarsN />
www.neder.dk
"JD" <jonh@doe.xyz> skrev i en meddelelse
news:4492a6d6$0$60779$157c6196@dreader1.cybercity.dk...
>>> >> Hvad siger en "SELECT laan_til FROM udlaan WHERE laan_til>=NOW()" ?
>>> >>
>> SELECT laan_til, CURDATE() FROM udlaan WHERE laan ='Sony'
>> vises der 1 lån på siden med dagens dato
>> datoformatet er 2006-07-16
>
> Du mener vel 2006-06-16? Men er det så korrekt eller ej? I.flg. din
> tidligere tabel er der to rækker med "Sony". Enten fortæller du kun
> halvdelen af sandheden eller også er din MySQL server helt hen i skoven.
>
>> Jeg ved godt det kan være lige meget hvilket format datoer har men nu er
>> det
>> blevet en princip sag
>
> Du snakker sort I ovenstående eksempel viser den bare standard MySQL
> formatet, yyyy-mm-dd, og det er fuldstændigt underordnet. Jeg synes ikke
> du skal koncentrere dig om dét lige p.t. da du altid kan ændre formatet,
> når du en gang får de rigtige rækker ud af databasen.
> Hvad med det unikke ID felt - har du sådan ét?
>
>
Tabeller er tømt så der kun er de 'rigtige' datoer i den
Mysql standard format har altid virket men jeg vil gernne have dato format
til at være dd-mm-yyyy
Systemet har været lavet i asp indtil vores win server gik i sort, jeg ved
hvad brugerne kan finde på at skrive som dato så derfor vil jeg gerne det
var i dd-mm-yyyy format.
mit ID er INT Autoincrement
Lars
| |
Martin (17-06-2006)
| Kommentar Fra : Martin |
Dato : 17-06-06 01:33 |
|
Nederbasse wrote:
> Tabeller er tømt så der kun er de 'rigtige' datoer i den
> Mysql standard format har altid virket men jeg vil gernne have dato format
> til at være dd-mm-yyyy
> Systemet har været lavet i asp indtil vores win server gik i sort, jeg ved
> hvad brugerne kan finde på at skrive som dato så derfor vil jeg gerne det
> var i dd-mm-yyyy format.
> mit ID er INT Autoincrement
Et godt sted at starte er at kigge i dokumentationen.
Jeg vil give dig et lille hint DATE_FORMAT()
Eller hvis du vil lave datoen via PHP/ASP's tidsfunktioner så skal du
kigge på UNIX_TIMESTAMP()
> Med denne
> SELECT laan_til, CURDATE() FROM udlaan WHERE laan ='Sony'
> vises der 1 lån på siden med dagens dato
Har du kun 1 post i din database hvor laan = sony?
SELECT
DATE_FORMAT('laan_til','%d-%m-%Y') AS laandato
FROM
udlaan
WHERE
laan = 'Sony'
AND
laan_til <= CUR_DATE()
Dette vil udskrive dd-mm-yyyy i variablen laandato,
hvor laan = 'Sony' og laan_til er MINDRE end dagsdato.
PS: Endnu et hint
< www.mysql.com/doc>
Den er nu rar at have i hånden :)
| |
|
|