[ASP] Problemen met wegschrijven/ophalen datums

Pagina: 1
Acties:

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:30
Bij een externe klant hebben we een applicatie op een webfarm geinstalleerd. Deze applicatie kan datums wegschrijven naar de database en deze datums naderhand inlezen.

De applicatie is voorzien van een Access 2000 database, waarvan de datumnotatie is vastgesteld op de korte datumnotatie (Short Date).

Wanneer een gebruiker een datum wil wegschrijven naar de database, laat ik eerst de onderstaande functie uitvoeren.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FUNCTION getDatumnotatie()
   dim dateBegindatum, strDatumnotatie

   'Zet de variabele dateBegindatum op 31 december 2001
   dateBegindatum = CDate("01/01/2002")
   dateBegindatum = dateadd("d",-1,dateBegindatum)

   'Bepaal het scheidingsteken tussen dag & maand
   getDatumnotatie = right(left(dateBegindatum,3),1)

   'Amerikaanse datumnotatie op webserver
   IF (Left(dateBegindatum,2) = "12") THEN
      getDatumnotatie = "mm" & getDatumnotatie & "dd" & getDatumnotatie & "yyyy"    

   'Nederlandse datumnotatie op webserver
   ELSEIF (Left(dateBegindatum,2) = "31") THEN
      getDatumnotatie = "dd" & getDatumnotatie & "mm" & getDatumnotatie & "yyyy"
   END IF
END FUNCTION


Deze functie retourneert de gehanteerde datumnotatie op de webserver, zodat de gebruiker weet op welke wijze hij/zij datums moet invoeren.

Ik heb net een aantal keren getest, maar bij de klant gaat e.e.a. niet goed. De functie getDatumnotatie retourneer "dd-mm-yyyy". Als ik echter een datum "12-03-2003" invoer en wegschrijf, wordt de datum weggeschreven als "03-12-2003".

BTW. Ook bij het ophalen van datums wordt gebruik gemaakt van bovenstaande functie.

Wie weet wat ik verkeerd doe?

[ Voor 13% gewijzigd door TweakersOnly op 14-03-2003 11:37 ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Waarom los je dit probleem met het formaat van data gewoon niet op door op je server de locale ID te specificieren :?
ASP:
1
Session.LCID = 1043

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:30
devraux schreef op 14 March 2003 @ 11:54:
Waarom los je dit probleem met het formaat van data gewoon niet op door op je server de locale ID te specificieren :?
ASP:
1
Session.LCID = 1043
Session.LCID werkt niet voor wegschrijven van data naar de database. Is alleen geschikt voor het weergeven van datums. Probleem is dat de datums volgens de de op de webserver gehanteerde notatie worden ingevoerd maar toch anders worden opgeslagen in de database.

BTW. De datums worden weggeschreven naar de database, zoals ze worden ingevoerd, met kootjes ( ' ) erom heen, als tekst zogezegd.

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Heb blijkbaar niet goed opgelet ;) was er namelijk vanuit gegaan dat het om data ging die afkomstig was uit een of andere Date()/Time() functie en niet van invoer door gebruikers

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Verwijderd

Waarom maak je niet gebruik van de asp functies
Dag = Day(Date)
Maand = Month(Date)
Jaar = Year(Date)
Als het een Engelse datum notatie is draait ie volgens mij Day en Month om.

Kleine tip:
Mocht je gebruik gaan maken van sorteren op datum moet je de datum verkeerdom wegschrijven.
yyyymmdd > 20030314

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:30
Verwijderd schreef op 14 March 2003 @ 12:11:
Waarom maak je niet gebruik van de asp functies
Dag = Day(Date)
Maand = Month(Date)
Jaar = Year(Date)
Als het een Engelse datum notatie is draait ie volgens mij Day en Month om.
Volgens mij ligt het probleem niet zozeer bij de webserver maar meer bij de database. Ik zal e.e.a. uitleggen aan de hand van een voorbeeld.

Ik moet twee contracten toevoegen. Elk contract heeft een begindatum en kan een einddatum hebben. Een contract A start op 1 januari 2003 en heeft in eerste instantie geen einddatum. Naderhand wordt een contract B toegevoegd per 12 maart 2003. Er mag max. 1 contract tegelijkertijd zijn geregistreerd. De einddatum van contract A wordt daarom na de registratie van contract B automatisch op 11 maart 2003 gezet.

Op het invoerformulier staat vermeld dat de datumnotatie op de webserver "dd/mm/yyyy" is. Ik voer de achtereenvolgens de volgende gegevens in:

** Contract A: Begindatum = '01/01/2003', Einddatum = ''

Als ik de gegevens opvraag, staat de begindatum van contract A vermeld als '1-1-2003'

** Contract B: Begindatum = '12/03/2003' , Einddatum = ''

Als ik de gegevens opvraag, staat de de begindatum van contract B vermeld als '3-12-2003'. De einddatum van contract A is vastgesteld op '3-11-2003'. De gegevens dit in de database staan kloppen dus wel :? , maar worden niet volgens de op de webserver gehanteerde datumnotatie, zie de uitput van de funtie getDatumnotatie(), naar de gebruiker toe gepresenteerd.

Erg vreemd allemaal ... :? :?

[ Voor 5% gewijzigd door TweakersOnly op 14-03-2003 12:48 ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Het is duidelijk dat Access in dit geval een andere notatie hanteerd dan de webserver(VS<->NL, vandaar dat het mij verstandig lijkt beide te synchroniseren met een LCID.

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:30
devraux schreef op 14 maart 2003 @ 12:57:
Het is duidelijk dat Access in dit geval een andere notatie hanteerd dan de webserver(VS<->NL, vandaar dat het mij verstandig lijkt beide te synchroniseren met een LCID.
I agree ... :) Nu is alleen de vraag hoe de instellingen van Access aangepast kunnen worden aan het Nederlandse formaat? We weten immers dat de webserver de Nederlandse datumnotatie hanteert ...

Verwijderd

Geweldige pagina: http://www.codeave.com/asp/date_time.asp

Gebruik ik (veel te) vaak.
TweakersOnly schreef op 14 March 2003 @ 13:03:
[...]

I agree ... :) Nu is alleen de vraag hoe de instellingen van Access aangepast kunnen worden aan het Nederlandse formaat? We weten immers dat de webserver de Nederlandse datumnotatie hanteert ...
Misschien vat ik het niet helemaal hoor, maar als je nou in Access een veld met datum/tijd notatie maakt, je slaat gewoon in US formaat de datum en event. de tijd op, en op de pagina die hem ophaald, gebruik je Session.LCID = 1043

Moet werken toch :?

[ Voor 74% gewijzigd door Verwijderd op 14-03-2003 16:46 ]


  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

ASP:
1
2
3
4
5
6
7
8
9
function DutchDate ( TempDate )
    TempDate        = DatePart("yyyy",TempDate) &_
 "-" & right("0" & DatePart("m",TempDate),2) &_
 "-" & right("0" & DatePart("d",TempDate),2) &_
 " " & right("0" & hour(time),2) & ":" &_
 right("0" & minute(time),2) & ":" &_
 right("0" & second(time),2)
    DutchDate = TempDate
end function


in MYSQL-formaat :) met voorloopnullen

(ja is lelijk, maar anders gaat de lay-out eraan)

[ Voor 36% gewijzigd door Scharnout op 14-03-2003 21:40 ]

And Bob's your uncle ...


  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 07:07
Dit is al de zoveelste topic over dit onderwerp :(
Gelukkig kan je zoeken in dit forum:
- Zelfde probleem
- Zelfde probleem
- Zelfde probleem
enz.

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:30
Kan iemand mij nog wijze raad geven, want 't wil nog steeds niet erg lukken. Ik heb de search gebruikt maar daar komt ook geen eenduidig antwoord naar voren.

Ik heb de database aangepast. Oorspronkelijk stond bij alle datumvelden de short date als datumnotatie vermeld. Hiervoor in de plaats heb ik "dd/mm/yyyy" gedefinieerd, zonder succes.

Op de webfarm is zoals gezegd volgens de Nederlandse datumnotatie ingesteld. Er is echter geen MS Access geinstalleerd, alles gebeurt via de databasedrivers. Zodra ik een veld '08/02/2003' met kootjes naar de database wegschrijf, wordt dit omgedraaid naar '02/08/2003'. Het lezen e.d. van datums gaat wel goed.

Hoe kan ik dit op een uniforme wijze oplossen?

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Zoals al eerder gezegd, je zal dit in Access moeten aanpassen. Elk veld (kolom) in Access heeft zijn eigen attributen. Voor een datumveld kan je aangeven in welke vorm dit wordt opgeslagen.

Wat er nu gebeurt is dat Access een datum aangeboden krijgt. Door de inputlocal weet Access in welke vorm de datum staat. Dit wordt bij het opslaan omgevormd naar zijn eigen formaat. Bij het opvragen van de datum krijg je dus het formaat dat is aangegeven in Access.

Ik weet het niet zeker (hier geen Access tot mijn beschikking) maar het lijkt me dat de US timelocal de defaultwaarde is. Als je weet dat dit het geval is dan is daar toch omheen te werken? Of je zal de database moeten aanpassen.

I'm not a complete idiot - several parts are missing.


  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 07:07
Ok, lezen is niet altijd even makkelijk voor sommige mensen ...

Access wil graag data's verwerken in het format "mm/dd/yyyy". Als je je hieraan houdt werken al je queries goed. Om dit formaat te krijgen maak je gewoon een simpele functie (bijv ConvDate) die je invoer omzet naar het gewenste format. Dus is je invoer "dd-mm-yyyy" dan bouw je een functie die zoiets doet als:

NewDate = Month(OldDate) & "/" & Day(OldDate) & "/" & Year(OldDate)

Dit is nu een string. Gebruik de functie "DateValue(NewDate)" en je hebt weer een datum die je verwerkt in je SQL query: Insert Into tblBlaat ..... ConvDate(myDate);

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu

Pagina: 1