/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Datoindtastning
Fra : Lasse Hedegaard


Dato : 23-02-11 06:02

Hej med jer

Jeg står og skal bruge et script der kan lave en indtastet dato om til
et bestemt format. Det skal ske i det øjeblik feltet forlades (fx med
tab eller mus).

Slutresultatet skal være i formatet dd.mm.åååå

Jeg vil gerne kunne indtaste på disse måder:

dd.mm.åååå (naturligvis, da dette er det ønskede output)

Vigtigst:

ddmm (åååå skal i så fald blive indeværende år)
ddmmåå
ddmmåååå

Mindre vigtig:

dd?mm (åååå skal i så fald blive indeværende år)
dd?mm?åå
dd?mm?åååå

?-tegnet kan her betyde hvad som helst, men det vil i virkeligheden
nok kun være de tre tegn . - /

Hvis datoen kun indtastes som ét ciffer, så må scriptet naturligvis
gerne foranstille et nul (altså d -> dd), men det er umiddelbart ikke
hamrende vigtigt.

Jeg har ledt lidt, men har umiddelbart ikke fundet en færdigt script
der kan dette. Er der nogen her der kan trylle?

/Lasse

 
 
Birger Sørensen (23-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 23-02-11 17:59

Lasse Hedegaard har bragt dette til verden:
> Hej med jer
>
> Jeg står og skal bruge et script der kan lave en indtastet dato om til
> et bestemt format. Det skal ske i det øjeblik feltet forlades (fx med
> tab eller mus).
>
> Slutresultatet skal være i formatet dd.mm.åååå
>
> Jeg vil gerne kunne indtaste på disse måder:
>
> dd.mm.åååå (naturligvis, da dette er det ønskede output)
>
> Vigtigst:
>
> ddmm (åååå skal i så fald blive indeværende år)
> ddmmåå
> ddmmåååå
>
> Mindre vigtig:
>
> dd?mm (åååå skal i så fald blive indeværende år)
> dd?mm?åå
> dd?mm?åååå
>
> ?-tegnet kan her betyde hvad som helst, men det vil i virkeligheden
> nok kun være de tre tegn . - /
>
> Hvis datoen kun indtastes som ét ciffer, så må scriptet naturligvis
> gerne foranstille et nul (altså d -> dd), men det er umiddelbart ikke
> hamrende vigtigt.
>
> Jeg har ledt lidt, men har umiddelbart ikke fundet en færdigt script
> der kan dette. Er der nogen her der kan trylle?
>
> /Lasse

Der skal vist også trylles - eller i hvert fald bruges en eller anden
form for magi -, hvis det skal kunne lade sig gøre...

Den nemme (og farbare vej) er at have tre input felter i stedet for
een.
Det er ikke programmerings-muligt at dekode f.eks. 1310
Det er enten 1/3-1910 eller 13/10-2011 efter din opskrift.
Og det er bare eet eksempel på de mange ting der kan gå galt.

Ellers er det vel noget med at detektere karakterer, der ikke er
numeriske, tælle indhold af de tilsvarende felter, og sætte 0 foran,
hvis antallet er mindre end 2 (19 eller 20 hvis mindre en 11 hvis i
året?)
Derefter noget med at sætte det helle sammen til een numerisk streng,
som så kan skilles med .
Alt i alt en temmelig kompliceret rutine, der alligevel ikke kan
garantere at resultatet bliver den dato der ønskes.

Så tre linier, eller en begrænsning af formatet, med et check på at det
indtastede format overholder reglerne, før der "dekodes".

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Lasse Hedegaard (23-02-2011)
Kommentar
Fra : Lasse Hedegaard


Dato : 23-02-11 13:29

Hej Birger

Det skal være ét felt (det er det allerede, og det kan/skal ikke laves
om - og datoer vises i felterne som dd.mm.åååå - der er mange
datofelter i samme formular). Glem tanken om de (manglende)
foranstillede nuller. Vi klarer os med, at man mindst skal taste fire
cifre.

Jeg tror umiddelbart man kan komme langt med en funktion der først
sletter alle ikke-numeriske tegn.

Herefter sker en af følgende to ting:

1) Er der fire cifre tilbage, så tilføjes 2011 i slutningen af
strengen

2) Er der seks cifre tilbage, så indskydes 20 inden de to sidste
cifre.

Til sidst indskydes der punktummer efter andet og fjerde ciffer.

Vi har ikke brug for, at indtaste datoer langt tilbage, men ift. pkt.
2 kunne man godt lave noget, så der i nogle tilfælde ville blive
indsat 19 i stedet for 20 (ved 80-99 så indsættes 19, og ved 00 til
79, så indsættes 20 - eller noget i den stil).

Jeg kan desværre ikke selv javascript.

/Lasse

On 23 Feb., 17:59, Birger Sørensen <s...@bbsorensen.com> wrote:
> Lasse Hedegaard har bragt dette til verden:
>
>
>
>
>
> > Hej med jer
>
> > Jeg st r og skal bruge et script der kan lave en indtastet dato om til
> > et bestemt format. Det skal ske i det jeblik feltet forlades (fx med
> > tab eller mus).
>
> > Slutresultatet skal v re i formatet dd.mm.
>
> > Jeg vil gerne kunne indtaste p disse m der:
>
> > dd.mm. (naturligvis, da dette er det nskede output)
>
> > Vigtigst:
>
> > ddmm ( skal i s fald blive indev rende r)
> > ddmm
> > ddmm
>
> > Mindre vigtig:
>
> > dd?mm ( skal i s fald blive indev rende r)
> > dd?mm?
> > dd?mm?
>
> > ?-tegnet kan her betyde hvad som helst, men det vil i virkeligheden
> > nok kun v re de tre tegn . - /
>
> > Hvis datoen kun indtastes som t ciffer, s m scriptet naturligvis
> > gerne foranstille et nul (alts d -> dd), men det er umiddelbart ikke
> > hamrende vigtigt.
>
> > Jeg har ledt lidt, men har umiddelbart ikke fundet en f rdigt script
> > der kan dette. Er der nogen her der kan trylle?
>
> > /Lasse
>
> Der skal vist ogs trylles - eller i hvert fald bruges en eller anden
> form for magi -, hvis det skal kunne lade sig g re...
>
> Den nemme (og farbare vej) er at have tre input felter i stedet for
> een.
> Det er ikke programmerings-muligt at dekode f.eks. 1310
> Det er enten 1/3-1910 eller 13/10-2011 efter din opskrift.
> Og det er bare eet eksempel p de mange ting der kan g galt.
>
> Ellers er det vel noget med at detektere karakterer, der ikke er
> numeriske, t lle indhold af de tilsvarende felter, og s tte 0 foran,
> hvis antallet er mindre end 2 (19 eller 20 hvis mindre en 11 hvis i
> ret?)
> Derefter noget med at s tte det helle sammen til een numerisk streng,
> som s kan skilles med .
> Alt i alt en temmelig kompliceret rutine, der alligevel ikke kan
> garantere at resultatet bliver den dato der nskes.
>
> S tre linier, eller en begr nsning af formatet, med et check p at det
> indtastede format overholder reglerne, f r der "dekodes".
>
> Birger
>
> --http://varmeretter.dk- billig, sund og hurtig madhttp://bbsorensen.dk


Jens Peter Karlsen (23-02-2011)
Kommentar
Fra : Jens Peter Karlsen


Dato : 23-02-11 23:09

Se inline.

On Wed, 23 Feb 2011 12:29:25 -0800 (PST), Lasse Hedegaard
<laxxe@nospam.dk> wrote:

>Det skal være ét felt (det er det allerede, og det kan/skal ikke laves
>om - og datoer vises i felterne som dd.mm.åååå - der er mange
>datofelter i samme formular). Glem tanken om de (manglende)
>foranstillede nuller. Vi klarer os med, at man mindst skal taste fire
>cifre.

Det bør du kraftigt genoverveje.

>1) Er der fire cifre tilbage, så tilføjes 2011 i slutningen af
>strengen


Ok, den første marts kommer der en og skriver 1311. Det laver du så om
til 13.11.2011 mere end et halvt år efter den rigtige dato.

>2) Er der seks cifre tilbage, så indskydes 20 inden de to sidste
>cifre.

Denne bruger synes det er en god ide at skrive året fuldt ud så det
bliver 132011 som du så laver om til 13.20.2011 som ikke engang er en
valid dato.

Så glem det. Gør som Birger foreslog med tre dropdowns eller brug et
datepicker script. Der er masser af eksempler på Internettet.

Regards Jens Peter Karlsen.


Lasse Hedegaard (23-02-2011)
Kommentar
Fra : Lasse Hedegaard


Dato : 23-02-11 15:25

On 23 Feb., 23:08, Jens Peter Karlsen <jpkarl...@mvps.org> wrote:
> Se inline.
>
> On Wed, 23 Feb 2011 12:29:25 -0800 (PST), Lasse Hedegaard
>
> <la...@nospam.dk> wrote:
> >Det skal v re t felt (det er det allerede, og det kan/skal ikke laves
> >om - og datoer vises i felterne som dd.mm. - der er mange
> >datofelter i samme formular). Glem tanken om de (manglende)
> >foranstillede nuller. Vi klarer os med, at man mindst skal taste fire
> >cifre.
>
> Det b r du kraftigt genoverveje.

Det vil jeg tænke over, det kan godt ske, at man altid skal taste i
ddmmåå (som så er det eneste javascriptet æder, og laver om til
dd.mm.åååå).

> >1) Er der fire cifre tilbage, s tilf jes 2011 i slutningen af
> >strengen
>
> Ok, den f rste marts kommer der en og skriver 1311. Det laver du s om
> til 13.11.2011 mere end et halvt r efter den rigtige dato.

Du mener 1311 som 1. marts 2011? Det tror jeg ikke nogen taster sådan.
Jeg ved godt, at jeg snakkede om foranstillede nuller (men det var nu
kun det allerførste, som 10311 (1. marts 2011), og det er nok også
bare tænkt.

> >2) Er der seks cifre tilbage, s indskydes 20 inden de to sidste
> >cifre.
>
> Denne bruger synes det er en god ide at skrive ret fuldt ud s det
> bliver 132011 som du s laver om til 13.20.2011 som ikke engang er en
> valid dato.

Det vil blive fanget server side. Lige nu kan man godt taste
13.20.2011 i feltet - eller x5ghhgoi...

> S glem det. G r som Birger foreslog med tre dropdowns eller brug et
> datepicker script. Der er masser af eksempler p Internettet.

Ingen af de to ting vil virke her. Det handler om, at der skal
indtastes hundredevis af datoer hver eneste uge (og mange på en gang).
Derfor skal det gerne være hurtigt og nemt, så både datepicker og drop
downs er dømt ude (jeg irriterer mig i øvrigt selv meget over disse,
når jeg støder på dem). Det er sådan set kun en eller to personer der
skal indtaste datoerne.

Pt. taster vi datoerne i Navision, hvor man godt kan taste de
varianter jeg har nævnt. Vi er dog på vej over til et webbaseret
system.

/Lasse

Jens Peter Karlsen (24-02-2011)
Kommentar
Fra : Jens Peter Karlsen


Dato : 24-02-11 12:19

Til begrænset internt brug som her kan du godt nøjes med et
almindeligt tekstfelt. Skriv det forventede dato format under feltet,
det vil nedbringe fejl en hel del.
Datoerne skal formentlig i en database så i stedet for at involvere et
javascript så lad indsætningen om at konvertere strengen til et dato
objekt (se hjælpen til databasen).
Det eneste du så skal bruge et JS script til er lige at tjekke længden
af input.

Regards Jens Peter Karlsen.

On Wed, 23 Feb 2011 14:25:15 -0800 (PST), Lasse Hedegaard
<laxxe@nospam.dk> wrote:

>Ingen af de to ting vil virke her. Det handler om, at der skal
>indtastes hundredevis af datoer hver eneste uge (og mange på en gang).

Birger Sørensen (24-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 24-02-11 12:45

Den 24-02-2011, skrev Jens Peter Karlsen:
> Til begrænset internt brug som her kan du godt nøjes med et
> almindeligt tekstfelt. Skriv det forventede dato format under feltet,
> det vil nedbringe fejl en hel del.
> Datoerne skal formentlig i en database så i stedet for at involvere et
> javascript så lad indsætningen om at konvertere strengen til et dato
> objekt (se hjælpen til databasen).
> Det eneste du så skal bruge et JS script til er lige at tjekke længden
> af input.
>
> Regards Jens Peter Karlsen.
>
> On Wed, 23 Feb 2011 14:25:15 -0800 (PST), Lasse Hedegaard
> <laxxe@nospam.dk> wrote:
>
>> Ingen af de to ting vil virke her. Det handler om, at der skal
>> indtastes hundredevis af datoer hver eneste uge (og mange på en gang).

Jeg vil mene, at hvis der er flere (mange) datoer i samme form, vil det
være en fordel at validere værdierne, inden indsendelse, efterhånden
som der indtastes - med onchange eventen som trigger.
Ellers kan der hurtigt blive et problem, med hvilet af felterne der
ikke indeholder en valid dato.
Hvis man er hooked på serverside check, kan man bruge AJAX.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Larsen (23-02-2011)
Kommentar
Fra : Martin Larsen


Dato : 23-02-11 23:51

Lasse Hedegaard wrote:

> Jeg står og skal bruge et script der kan lave en indtastet dato om til
> et bestemt format. Det skal ske i det øjeblik feltet forlades (fx med
> tab eller mus).

Som de andre skriver i tråden, er du ude på usikker grund, men kig her:

http://kreacom.dk/test/datoformat.html

Det klarer de eksempler du kommer med, dog ikke med dato som ét ciffer.
Det er simpelthen FOR usikkert når du også tillader formater uden
seperatorer, så det har jeg valgt fra.

Der er selvfølgelig en masse forbehold, fx: Pt. tjekker den kun
formatet, ikke indholdet. Så 31.02.2011 er lovlig - og 39.13.2011 for
den sags skyld! Men det kan den let udvides med.

Og hvad med år som 2 cifre. Er 11.11.11 lig med 11.11.2011 eller
11.11.1911? Jeg har sat en skæringsdato så <=30 betyder 2000, ellers
1900. Fx 11.11.15 = 11.11.2015, 11.11.95 = 11.11.1995

function datoformat() {

var rx1 = /^(\d\d)[-.:\/]?(\d\d)[-.:\/]?(\d\d\d\d)$/;
var rx2 = /^(\d\d)[-.:\/]?(\d\d)[-.:\/]?(\d\d)$/;
var rx3 = /^(\d\d)[-.:\/]?(\d\d)$/;

el=document.getElementById("dato");
var thisyear = new Date().getFullYear();
var dd=mm=0;

if(m=el.value.match(rx1)) {
dd=m[1]; mm=m[2]; yyyy=m[3];
}
else if(m=el.value.match(rx2)) {
dd=m[1]; mm=m[2];
if(m[3]<=30)
yyyy="20"+m[3];
else
yyyy="19"+m[3];
}
else if(m=el.value.match(rx3)) {
dd=m[1]; mm=m[2]; yyyy=thisyear;
}
else {
alert("ugyldig dato");
return;
}
el.value = dd+"."+mm+"."+yyyy;

}

Lasse Hedegaard (23-02-2011)
Kommentar
Fra : Lasse Hedegaard


Dato : 23-02-11 16:10

Hej Martin

Wow, hvor fornemt - det ser knaldgodt ud.

Jeg præsenterer det for en kollega i morgen (hende der primært skal
taste datoerne), tusind tak skal du have!

/Lasse

Martin Larsen (24-02-2011)
Kommentar
Fra : Martin Larsen


Dato : 24-02-11 00:21

Lasse Hedegaard wrote:

> Jeg præsenterer det for en kollega i morgen (hende der primært skal
> taste datoerne), tusind tak skal du have!

Selv tak.

Hvis du vil have noget der er mere skudsikkert og validerer datoen etc,
kan jeg evt. lave det mod en passende betaling. Jeg har lavet masser af
den slags før.

Ellers kan du måske selv udvide det.

Martin

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste