/ 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
Datoer til tal og omvendt.
Fra : Stig Johansen


Dato : 30-04-08 15:10

Hej alle.

Okay - indrømmet - jeg har ikke startet med at Google.

I forbindelse med et lille legeprojekt, vil jeg gerne have dato-tid
konverterninger lagt over på clientside.

Internt benytter jeg det - mere eller mindre - standardformat med
dage.fragment som en double.
Dvs i skrivende stund er dato/tidspunktet:
39568.6748847338

Findes der noget JS derude jeg kan 'låne' til omregning mellem 'human
readable' datoer og de her interne repræsentationer?

I min Delphi har jeg eksempelvis DateTimeToStr(tallet) og omvendt.
Det er lidt det jeg er ude efter.

--
Med venlig hilsen
Stig Johansen

 
 
Lasse Reichstein Nie~ (01-05-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-05-08 03:04

Stig Johansen <wopr.dk@gmaill.com> writes:

> I forbindelse med et lille legeprojekt, vil jeg gerne have dato-tid
> konverterninger lagt over på clientside.
>
> Internt benytter jeg det - mere eller mindre - standardformat med
> dage.fragment som en double.

Ick! Den kommer jeg aldrig til at kunne lide, specielt at der er
forskellig granularitet afhængig af hvor langt fra år 0 man er.

På den anden side har man det problem under alle omstændigheder,
da Javascript ikke har andre tal-typer end double.

> Dvs i skrivende stund er dato/tidspunktet:
> 39568.6748847338

39568 dage siden hvad? Så vidt jeg kan regne tilbage, så
er dag nummer 1 den 1. januar år 1 BC (i den bagud-udvidede
gregorianske kalender).

> Findes der noget JS derude jeg kan 'låne' til omregning mellem 'human
> readable' datoer og de her interne repræsentationer?

Prøv:

function decimalToDate(num) {
var date = new Date(0); //epoch;
date.setFullYear(0,0,0); // dag før 1. jan år -1
var day = Math.floor(num);
var time = num - day;
date.setDate(day);
date.setMilliseconds(Math.floor(time * 864e5));
return date;
}

> I min Delphi har jeg eksempelvis DateTimeToStr(tallet) og omvendt.
> Det er lidt det jeg er ude efter.

Nu har vi et dato-objekt, så det vil være den oplagte type.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 08:05

Lasse Reichstein Nielsen wrote:

> Ick! Den kommer jeg aldrig til at kunne lide, specielt at der er
> forskellig granularitet afhængig af hvor langt fra år 0 man er.

Hmm. - hvis man ikke kan få den man elsker, må man elske den man kan få.

Nu er det så den type/repræsentation, der er indbygget i mine værktøjer.
Delphi er primært Windows, så der er nok en eller anden sammenhæng der.

Det med manglende granularitet tror jeg ikke påvirker mine projekter i min
levetid.

>> Dvs i skrivende stund er dato/tidspunktet:
>> 39568.6748847338
>
> 39568 dage siden hvad? Så vidt jeg kan regne tilbage, så
> er dag nummer 1 den 1. januar år 1 BC (i den bagud-udvidede
> gregorianske kalender).

Hvis jeg laver en 'showdate' på 0, så er det 30.12.1899
Jeg kan ikke huske forklaringen på hvorfor det _ikke_ er 01.01.1900.

> Prøv:
[snip kode]
> Nu har vi et dato-objekt, så det vil være den oplagte type.

Takker, det må jeg kigge på.
Men det med typen ligger fast (næsten).
De her dato/tid felter ligger i Float(Double) felter i mine SQLite
databaser.
Så inputtet (= outputtet fra JS'et) kan bruge direkte i mine SQL sætninger.

Jeg ved ikke rigtig hvordan jeg skal lave det her.

Jeg kan se jeg ikke skrev særlig meget oprindeligt.
Men der er tale om udvælgelse af log records fra en Monitor database.
Dvs. fra dato og til dato, eller i givne tilfælde en enkelt dato.

Lyder simpelt - men..
Hvis der er tale om eksempelvis availability målinger, er det typisk over 30
dage, med få probes/dag. Her vil det være fint med noget datepicker eller
lign.
Men taler vi derimod om svartidsmålinger, så foregår det i små intervaller
med en rimelig burstrate.
Her vil fra og til tidspunktet være inden for nogle få minutter.
Dvs. her har jeg brug for fra og til klokkeslet også.

Jeg ved ikke om jeg udtrykker mig ordentligt, men der er tale om samme
system/funktion, hvor det er parametrerne der styrer indholdet.

Jeg har også luret på en slags date/time picker, men jeg tror det bliver for
besværligt med både dato og klokkeslet helt ned på sekunder.

Indtil videre har jeg bare lavet et par indtastnings felter med fra og til
'tal'.

Det er mere outputtet der er interessant, så jeg tror jeg vil se om ikke der
dukker et lys op engang.

--
Med venlig hilsen
Stig Johansen

Erik Ginnerskov (01-05-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 01-05-08 11:40

Lasse Reichstein Nielsen wrote:

> forskellig granularitet afhængig af hvor langt fra år 0 man er.

År 0? der har aldrig været et år med betegnelsen 0.

Vores nuværende tidsregning er indført af romerne for ca. 2008 år siden.
Romerne kendte ikke tallet nul - det er en arabisk opfindelse, der er et par
hundrede år yngre.

I øvrigt havde romerne den vane før vores tidsregnings begyndelse, at hver
gang man indsatte en ny regent - præsident eller kejser - startede man på en
ny tidsregning. Den for 2008 år siden tiltrædende kejser valgte så at
indføre den praktiske lov at videreføre tidsregningen ved regentskifte i
stedet for at begynde forfra.

Vores tidsregning har desuden slet ikke noget med kristendommen at gøre,
selv om kirkefolk stædigt fastholder det.

> 39568 dage siden hvad? Så vidt jeg kan regne tilbage, så
> er dag nummer 1 den 1. januar år 1 BC (i den bagud-udvidede
> gregorianske kalender).

Har du så medregnet skiftet fra juliansk til gregoriansk kalender? Jeg
husker hvor mange dage man tilføjede, for at få det til at passe med
årstidernes skiften.

Året i den julianske kalender var på præcis 365 dage, mens den gregorianske
kalender er på rundt regnet 365 dage og 6 timer (årsagen til skuddagen hvert
fjerde år (undtagen i år deleligt med 100 (og dog alligevel i år deleligt
med 400))). Man havde derfor gennem nogle hundrede år fået oparbejdet en
manko på ret mange dage.

Det manglende år 0 er forresten årsagen til at en masse mennesker to fejl,
da de fejrede årtusindeskifte den 1. januar år 2000 - det skete faktisk
først den 1. januar 2001.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk



Lasse Reichstein Nie~ (01-05-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-05-08 13:43

"Erik Ginnerskov" <erik.ginnerskov@live.dk> writes:

> Lasse Reichstein Nielsen wrote:
>
>> forskellig granularitet afhængig af hvor langt fra år 0 man er.
>
> År 0? der har aldrig været et år med betegnelsen 0.

Mit sjusk. Jeg skulle have sagt "nulpunktet for kalenderen", typisk
kaldt epoken.

Der har heller aldrig været et år 12 i den Gregorianske kalender.

> Vores nuværende tidsregning er indført af romerne for ca. 2008 år siden.

Den Julianske kalender blev indført i år 45 BC (så vi kan nok godt regne
med at de ikke brugte Kristi fødsel som nulpunkt dengang :)

> Romerne kendte ikke tallet nul - det er en arabisk opfindelse, der er et par
> hundrede år yngre.

Det er ikke den eneste grund.

Nulpunktet er netop et punkt, mens år er intervaller. År et er netop det
første år efter nulpunktet, og år "1 før" er det sidste år før nulpunktet.

Selv hvis man kender nul, så ændre det ikke ved at der ikke er en periode
der er nul år fra nulpunktet.

> I øvrigt havde romerne den vane før vores tidsregnings begyndelse, at hver
> gang man indsatte en ny regent - præsident eller kejser - startede man på en
> ny tidsregning. Den for 2008 år siden tiltrædende kejser valgte så at
> indføre den praktiske lov at videreføre tidsregningen ved regentskifte i
> stedet for at begynde forfra.

Så vidt jeg ved blev Krist fødsel som nulpunk ikke indført før omkring
det sjette århundrede. Før det var man bare enige om hvor langt et år
var (hvilket næsten passede med naturen)

> Vores tidsregning har desuden slet ikke noget med kristendommen at gøre,
> selv om kirkefolk stædigt fastholder det.

Den Gregorianske kalender var selvfølgelig en viderebyggelse på den
Julianske, men man kan nok takke pave Gregor XIII for at den blev
indført. Det var så ikke før 1582, og forskellige lande skiftede
først senere.
Det er rigtigt at de ikke har noget med opfindelsen at gøre, men de
har en del at gøre med indførelsen.

>> 39568 dage siden hvad? Så vidt jeg kan regne tilbage, så
>> er dag nummer 1 den 1. januar år 1 BC (i den bagud-udvidede
>> gregorianske kalender).
>
> Har du så medregnet skiftet fra juliansk til gregoriansk kalender?

Netop ikke. Jeg bruger en "ekstrapoleret Gregorianks kalender", som
har et år nul. Det er den kalender som Date-klassen i Javascript
bruger, hvilket selvfølgelig gør alting meget nemmere.
(ECMA262 3.ed., afsnit 15.9.1.3)

Det matcher også tallet, da dag 1.0 så netop er 1. januar år 0.
Derfor regner jeg med at en lignende tanke ligger bag de double-kodede
tidspunkter.

> Jeg husker hvor mange dage man tilføjede, for at få det til at passe
> med årstidernes skiften.

Man fjernede faktisk 10 dage. Man skiftede direkte fra 18 februar til
1. marts i 1700 (eller 11 dage, afhængigt af hvordan man ser det, da
1700 var skudår i den Julianske kalender, men ikke i den
Gregorianske).

> Året i den julianske kalender var på præcis 365 dage, mens den gregorianske
> kalender er på rundt regnet 365 dage og 6 timer (årsagen til skuddagen hvert
> fjerde år (undtagen i år deleligt med 100 (og dog alligevel i år deleligt
> med 400))). Man havde derfor gennem nogle hundrede år fået oparbejdet en
> manko på ret mange dage.

Man havde også skudår i den Julianske kalender, men de var hvert fjerde
år, uden undtagelse. Altså var året netop antaget at være 365.25 døgn langt.
Derfor gik den Julianske kaldender ca en dag galt ca. hvert 128. år.
Hvis de ingen skuddage havde haft, så ville de forskyde sig med ca.
en dag hvert fjerde år.

Tilføjelsen fra den Gregorianske kalender var at udelade skudår i år
der var delelige med 100, undtagen hvis også delelige med 400, i.e., 97
skudår per 400 år i stedet for 100 skudår.
I den Gregorianske kalender er året antaget at være 365.2425 døgn.
Det er meget tættere på rigtigt (men det helt rigtige er sikkert ikke et
rationelt tal :)

> Det manglende år 0 er forresten årsagen til at en masse mennesker to fejl,
> da de fejrede årtusindeskifte den 1. januar år 2000 - det skete faktisk
> først den 1. januar 2001.

Hvor var du da folk kaldte mig pedant for at sige det samme :)

Et årtusinde er en *periode* på 1000 år. Årtusinde starter og stopper
hele tiden. Det er ikke specielt.
Det *første* årtusinde i vor tidsregning startede på den første dag af
år et og sluttede med den sidste dag i år 1000.
Så det tredje årtusinde startede netop 1. januar 2001.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 14:04

Lasse Reichstein Nielsen wrote:

> Man fjernede faktisk 10 dage. Man skiftede direkte fra 18 februar til
> 1. marts i 1700 (eller 11 dage, afhængigt af hvordan man ser det, da
> 1700 var skudår i den Julianske kalender, men ikke i den
> Gregorianske).

Nu må vi altså få det her på plads selvom det er lidt OT ;)
I den bog jeg tidligere omtalte, snakkede man om oktober 1582.
Jeg snakkede lige med Google, og han fandt denne her:
<http://geography.about.com/od/culturalgeography/a/gregorian_2.htm>
hvor der står:
....
Pope Gregory XIII designated that October 4, 1582 would be officially
followed by October 15, 1582.
.....
Men han skriver også:
....
Denmark and Protestant Germany switched by 1704
....
Så vi(danmark) var måske ikke så hurtige dengang.


--
Med venlig hilsen
Stig Johansen

Erik Ginnerskov (01-05-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 01-05-08 17:44

Lasse Reichstein Nielsen wrote:

> Hvor var du da folk kaldte mig pedant for at sige det samme :)

At jeg ikke dengang bakkede dig op, hænger nok sammen med, at jeg på det
tidspunkt ikke var daglig bruger på usenet - jeg fik først
fastnetforbindelse i efteråret 2001. Jeg har derfor desværre ikke set, at du
har forsøgt at oplyse 'de uvidende masser'.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk



Lasse Reichstein Nie~ (01-05-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-05-08 13:55

Stig Johansen <wopr.dk@gmaill.com> writes:

>>> Dvs i skrivende stund er dato/tidspunktet:
>>> 39568.6748847338
....
> Hvis jeg laver en 'showdate' på 0, så er det 30.12.1899
> Jeg kan ikke huske forklaringen på hvorfor det _ikke_ er 01.01.1900.

Nok førdi de starter med dag 1, ikke dag 0.

Men det burde være 1900, ikke år 0 som jeg kom frem til, der er basis.
Det passer meget bedre med antallet af dage.

>> Prøv:
> [snip kode]
>> Nu har vi et dato-objekt, så det vil være den oplagte type.
>
> Takker, det må jeg kigge på.

Nu jeg ved at det er 1900, og at du vil begge veje, så kan
du prøve de her:

function decimalToDate(num) {
var epoch = new Date(0);
epoch.setFullYear(1900,0,0); // dagen før 1. jan 1900
return new Date(epoch.getTime() + num * 864e5); // 864e5 ms/dag
}
function dateToDecimal(date) {
var epoch = new Date(0);
epoch.setFullYear(1900,0,0);
var diff = date.getTime() - epoch.getTime();
return diff / 864e5;
}

De regner dog vist stadig en dag galt i forhold til det tal du gav.

> Så inputtet (= outputtet fra JS'et) kan bruge direkte i mine SQL sætninger.

Jeg håber du tjekker det først, ellers er det et SQL-injection-angreb
der venter på at ske :)

Du kunne også bare konvertere på serveren.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 14:12

Lasse Reichstein Nielsen wrote:

> Stig Johansen <wopr.dk@gmaill.com> writes:
>> Så inputtet (= outputtet fra JS'et) kan bruge direkte i mine SQL
>> sætninger.
>
> Jeg håber du tjekker det først, ellers er det et SQL-injection-angreb
> der venter på at ske :)

_Don't_ push the ol' man ;)

(Medmindre du kan forklare hvordan man laver SQL injection på en hårdt
optimeret native code server med SQLite som backend DB).

> Du kunne også bare konvertere på serveren.

Præcis, men jeg vil hellere gøre det clientside. Det er trods alt der locale
settings ligger.

--
Med venlig hilsen
Stig Johansen

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 15:05

Lasse Reichstein Nielsen wrote:

> Jeg håber du tjekker det først, ellers er det et SQL-injection-angreb
> der venter på at ske :)

Nu kører det her på en hjemmestrikket kværn, og jeg har lavet et 'gratisdns'
ting, så hvis det virker - så virker det.
Den her:
<http://wopr.lir.dk/wopr.tools/monitor/monitor.statistics.html>
skulle nogenlunde illustrere hvad jeg er ude på/efter.
Altså det med fra og til datoer, og - ja - jeg ved godt det ligner lort,
work in progress.

Jeg kører lidt forskellige monitoreringer men som database kan man prøve:
/WOPR/db/wopr.oio.db

--
Med venlig hilsen
Stig Johansen

Lasse Reichstein Nie~ (01-05-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-05-08 17:12

Stig Johansen <wopr.dk@gmaill.com> writes:

> Denmark and Protestant Germany switched by 1704
> ...
> Så vi(danmark) var måske ikke så hurtige dengang.

Jeg baserede mig på Calendar FAQ
<URL:http://www.tondering.dk/claus/cal/node3.html>
som siger:
---
Denmark (including Norway):
18 Feb 1700 was followed by 1 Mar 1700
---
(Han siger også at der ikke altid er enighed bland autoriteter om
hvornår det egentlig skete :)

Wikipedia siger også 1700.
Samme gør den Store Danske Encyclopædi.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Lasse Reichstein Nie~ (01-05-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-05-08 17:19

Stig Johansen <wopr.dk@gmaill.com> writes:

> _Don't_ push the ol' man ;)
>
> (Medmindre du kan forklare hvordan man laver SQL injection på en hårdt
> optimeret native code server med SQLite som backend DB).

Nope, det aner jeg ikke, men regel nummer et for sikker klient/server-kode
er "stol ikke på klienten".

Hvis du blindt indsætter input fra klienten, og forventer fx "35960.24",
men får "35960.24'; DROP TABLE;" eller sådan noget, så kan det gå arbitrært
galt.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 19:36

Lasse Reichstein Nielsen wrote:

> Stig Johansen <wopr.dk@gmaill.com> writes:
>
>> _Don't_ push the ol' man ;)
>>
>> (Medmindre du kan forklare hvordan man laver SQL injection på en hårdt
>> optimeret native code server med SQLite som backend DB).
>
> Nope, det aner jeg ikke,

Det gør jeg heller ikke.

> men regel nummer et for sikker klient/server-kode
> er "stol ikke på klienten".

Præcis.

> Hvis du blindt indsætter input fra klienten, og forventer fx "35960.24",
> men får "35960.24'; DROP TABLE;" eller sådan noget, så kan det gå
> arbitrært galt.

Det handler om, udover det du skriver, at _databasen_ er vulnerable overfor
den slags.
Det er eks. M$ SQLServer i allerhøjeste grad mens SQLite mere er ovre 'flad
fil' enden.

Så i forhold til SQLite (nuværende version) kan man skrive SQL injection
forsøg fra nu af og til man ligger 6 fod under jorden.

--
Med venlig hilsen
Stig Johansen

Christian Hansen (01-05-2008)
Kommentar
Fra : Christian Hansen


Dato : 01-05-08 05:43

Hej Stig

Jeg har for lang tid siden lavet en implementation af juliansk dag (
ikke at forveksle med juliansk dato! ). Scriptet finder du her:

<http://www.chrsen.dk/da/scripter/javascript/calendar/>

Jeg er ved at skrive en ny udgave, der extender Date-objected, men det
gør bestemt ikke nuværende script ubrugbart.

Isør er du interesseret i funktionerne mkjd() og jd2date()

Mvh christian

Stig Johansen wrote:
> Hej alle.
>
> Okay - indrømmet - jeg har ikke startet med at Google.
>
> I forbindelse med et lille legeprojekt, vil jeg gerne have dato-tid
> konverterninger lagt over på clientside.
>
> Internt benytter jeg det - mere eller mindre - standardformat med
> dage.fragment som en double.
> Dvs i skrivende stund er dato/tidspunktet:
> 39568.6748847338
>
> Findes der noget JS derude jeg kan 'låne' til omregning mellem 'human
> readable' datoer og de her interne repræsentationer?
>
> I min Delphi har jeg eksempelvis DateTimeToStr(tallet) og omvendt.
> Det er lidt det jeg er ude efter.
>

Stig Johansen (01-05-2008)
Kommentar
Fra : Stig Johansen


Dato : 01-05-08 08:12

Christian Hansen wrote:

> Hej Stig
>
> Jeg har for lang tid siden lavet en implementation af juliansk dag (
> ikke at forveksle med juliansk dato! ). Scriptet finder du her:
>
> <http://www.chrsen.dk/da/scripter/javascript/calendar/>
>
> Jeg er ved at skrive en ny udgave, der extender Date-objected, men det
> gør bestemt ikke nuværende script ubrugbart.
>
> Isør er du interesseret i funktionerne mkjd() og jd2date()

Jeg har lige skimmet det, og det ligner meget noget brugbart.
Jeg er dog lidt ideforladt mht. præsentationen, så jeg har lagt det lidt på
køl.

Men du skriver:
....
Med mkCalendarView() kan du indsætte en javascript-genereret
evighedskalender.
....

Hvis det ikke er lavet om, så er spørgsmålet:
Har du husket at tage højde for det _ikke_ er skudår i år 4840 ?

Jeg så det beskrevet i en bog om kalendere engang for 20+ år siden da jeg
skulle lave valørdage (=find påske etc).

Jeg har ikke undersøgt om det stadig skulle gælde. Jeg tror man gik over til
skudsekunder i stedet.

--
Med venlig hilsen
Stig Johansen

Jens Peter Karlsen (02-05-2008)
Kommentar
Fra : Jens Peter Karlsen


Dato : 02-05-08 01:11

Ja, man gik over til skudsekunder. Vi havde et for ikke så længe
siden.
http://da.wikipedia.org/wiki/Skudsekund

Regards Jens Peter Karlsen.

On Thu, 01 May 2008 09:12:19 +0200, Stig Johansen <wopr.dk@gmaill.com>
wrote:

>Hvis det ikke er lavet om, så er spørgsmålet:
>Har du husket at tage højde for det _ikke_ er skudår i år 4840 ?
>
>Jeg så det beskrevet i en bog om kalendere engang for 20+ år siden da jeg
>skulle lave valørdage (=find påske etc).
>
>Jeg har ikke undersøgt om det stadig skulle gælde. Jeg tror man gik over til
>skudsekunder i stedet.

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

Månedens bedste
Årets bedste
Sidste års bedste