13. Invoeren en tonen van datum in Brocade

Auteur

Richard Philips

Aanmaak

29 maart 2010

Oud BVV nr

2097

13.1. Abstract

Dit document beschrijft hoe een datum kan worden behandeld in Brocade.

13.2. Invoeren en tonen van een tijdsaanduiding

Brocade laat geen varianten toe: de tijd wordt steeds getoond als: hh:mm[:ss] en opgeslagen in de Brocade databank als een integer tussen in [0, 86400[

Hoewel er in diverse locales andere vormen bestaan (vb. 09:35 PM, 2135) worden deze niet geparametriseerd binnen Brocade: de tijd wordt steeds weergegeven als bijvoorbeeld 21:35. Deze alternatieve vormen hebben immers heel wat problemen:

  • aanduiden van seconden is niet geparamteriseerd;

  • onduidelijkheid (en streekafhankelijkheid) of 12:25 moet worden voorgesteld als 12:25 AM of 00:25 PM;

  • weinig gebruikt: 2135 wordt bijvoorbeeld enkel gebruikt in een militaire context.

Voorbeelden:

53100 opgeslagen: 14:35 getoond (in hh:mm context)

53105 opgeslagen: 14:35:05 getoond (in hh:mm:ss context)

Note

  • De context hh:mm of hh:mm:ss moet expliciet worden aangegeven.

  • Cijfers worden steeds aangevuld tot 2.

13.3. Opslag in de databank

In de databank wordt een datum steeds opgeslagen in +$H_"," formaat. Eventueel aangevuld met het aantal verstreken seconden.

Voorbeeld:

61814,: 2010-03-29 (ISO-format)

13.4. De registry waarde lc-date

Deze registry waarde bepaalt hoe een datum moet worden geïnterpreteerd en hoe deze moet worden getoond. Deze registry waarde wordt standaard op dd.mm.yyyy gezet en geldt voor de ganse Brocade toepassing op de server.

Voorbeelden van geldige lc-date waarden

België

dd.mm.yyyy

Frankrijk

dd-mm-yyyy

Duitsland

d.m.yyyy

Nederland

dd-mm-yyyy

Zuid-Afrika

yyyy/mm/dd

US

mm/dd/yyyy

13.5. Input door middel van de datepicker

Om de datepicker-widget te kunnen gebruiken moeten eerst en vooral een aantal m4 s in de header van het formulier gezet worden:

m4_jsEmbedFile(r4_brocade_js_home_url/jquery.js)

m4_embedjQueryUI

m4_embedDatepicker

De macro m4_documentElementInputDate($name, $value, $html, $pastemode, $dpid, $dptype, $dpsep, $helptopic) installeert een inputveld dat met datepicker kan ingevuld worden.

  • $id kan ingevuld worden met een identifier voor het datepickerobject, anders wordt een id berekend.

  • als er slechts 1 onafhankelijk datumveld gewenst is, moeten geen $dp parameters ingevuld worden (tenzij $dpid indien gewenst)

    m4_documentElementInputDate(FDdate,x4_varruntime(FDdate),size="5" maxlength="20",overwrite)

  • als er 2 met mekaar gerelateerde datumvelden gewenst zijn (van - tot), moet het juiste type (from | until) in de respectievelijke invulvelden ingevuld worden. De software gaat ervan uit dat het 'until' veld dat bij een 'from' veld hoort, het volgende m4_documentElementInputDate veld in de DOM is en omgekeerd.

    m4_documentElementInputDate(FDfrom,x4_varruntime(FDfrom),size="5" maxlength="20",overwrite,dptype=from)

    m4_documentElementInputDate(FDuntil,x4_varruntime(FDuntil),size="5" maxlength="20",overwrite,dptype=until)

  • als er een invulveld gewenst is waarin meerdere datums naast mekaar met datepicker kunnen ingevuld worden moet dptype=multi ingevuld worden, evenals dpsep indien een andere separator gewenst dan de default ";".

    m4_documentElementInputDate(FDdate,x4_varruntime(FDdate),size="5" maxlength="20",overwrite,dptype=multi,bb-ti)

13.6. Input van een datum door eindgebruikers

In een web-interface dient steeds de datepicker te worden gebruikt met readonly attribuut. Niet alleen geeft dit een mooie interface, maar dit voorkomt dat er foutieve of niet te interpreteren gegevens naar de server worden gestuurd.

De macro die wordt gebruikt om een ingevoerde datum te parsen is: m4_parseDate($hdate, $input).

13.7. Input door personeel

In een web-interface dient steeds de datepicker te worden gebruikt zonder readonly attribuut.

Toegelaten invoer

[0-9]{8}(exact 8 cijfers)

YYYYMMDD

[0-9]{1,2} (1 of 2 cijfers, getal < 32)

maand en jaar worden aangevuld uit de datum van vandaag

[0-9]{2}[0-9]{2} (exact 4 cijfers)

MMDD jaar worden aangevuld uit de datum van vandaag

[0-9]{1,2}[.-/ ]+[0-9]{1,2}

wordt geïnterpreteerd op basis van r4_lc_date als een dag en een maand, het jaar komt uit de datum van vandaag

[0-9]{1,2}[.-/ ]+[0-9]{1,2}[.-/ ]{1,4}

wordt geïnterpreteerd op basis van r4_lc_date als een dag en een maand en een jaar

[=0a-zA-Z]

de datum van vandaag

+[0-9]+

de datum van vandaag + aantal dagen

-[0-9]+

de datum van vandaag - aantal dagen

De macro die wordt gebruikt om een ingevoerde datum te parsen is: m4_parseDate($hdate, $input)

Voorbeelden met als datum van vandaag: 28 maart 2010 (= 61813,)

Input

hdate

20100329

61814,

0329

61814,

20

61805,

20 jul 2010

61927,

jul 20 2010

61927,

2010 jul 20

61927,

2010 20 jul

61927,

=

61813,

0

61813,

61813,

T

61813,

V

61813,

+1

61814,

-1

61812,

Voorbeelden met als datum van vandaag: 28 maart 2010 (= 61813,) en r4_lc_date = dd.mm.yyyy *)

Input

hdate

29 03

61814,

29 03 2010

61814,

29 2010 03

61814,

2010 29 03

61814,

29 03 10

61814,

29 03 0

61814,

29 03 010

61814,

13.8. Display van een datum

De macro die wordt gebruikt om een datum in $H formaat te tonen is: m4_displayDate($display, $hdate, $level="", $lg="")

$level kan "", h, m, s zijn en biedt de mogelijkheid om ook een tijdsaanduiding te specificeren.

Voorbeelden met r4_lc_date = dd.mm.yyyy

hdate

level

display

macro

61814,

29.03.2010

m4_displayDate(display,"61814,")

61814,

h

29.03.2010

m4_displayDate(display,"61814,","h")

61814,

m

29.03.2010

m4_displayDate(display,"61814,","m")

61814,

s

29.03.2010

m4_displayDate(display,"61814,","s")

61814,21345

29.03.2010

m4_displayDate(display,"61814,21345")

61814,21345

h

29.03.2010 05

m4_displayDate(display,"61814,21345","h")

61814,21345

m

29.03.2010 05:55

m4_displayDate(display,"61814,21345","m")

61814,21345

s

29.03.2010 05:55:45

m4_displayDate(display,"61814,21345","s")

13.9. Opmerkingen voor ontwikkelaars

Bij het berekenen van een $H gebruiken ontwikkelaars regelmatig de volgende constructie: m4_getDateConversion(hdate, "01/03/"_year, "<H>"). Beter is de lokale onafhankelijke constructie: m4_getDateConversion(hdate, year_"0301", "<H>") of m4\_parseDate(hdate, year\_"0301")