[ASP/VB] Datum en TimeStamp

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:01

Basszje

Reisvaap!]

Topicstarter
Iedereen die ASP/ Vb progt weet wel dat ze nogal (vooral asp trouwens ) 'variabel' met de datum omgaan, afhankelijk van de geinstalleerde taal op de server.
Dus de ene keer is het weer MM/DD/YYYY en de volgende keer DD/MM/YYYY.

Om dit te ondervangen had ik het briljante idee om gewoon de timestamp ( ik gebruik trouwens interbase ) in de database te zetten en gewoon hele tijd te converteren op basis van deze timestamp. Dan kan het ook niet verkeerd gaan in de database .

Nu is het wel mogelijk om met vb/vbscript gewoon via een timestamp een datum waarde te krijgen
( cdate(1) levert 31 januari 1899 op ) .
Ik kan alleen niet van een datum terug naar de timestamp :? .

Is er een functie in VB/ASP die dit wel kan? Anders ergens in de API?
Of moet ik deze droom maar laten varen :'(

Google googled alleen maar php links.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Verwijderd

Volgens mij werkt SQL niet met data's volgens de systeeminstellingen. Standaard gebruikt SQL namelijk MM/DD/YYYY.

Als je met ADO je database benadert d.m.v. recordset objecten dan zorgt ADO ervoor dat alles goed gaat met je data.

Mocht je runtime een query moeten samenstellen met een datum erin, gebruik dan de Month(), Day() en Year() functies om te zorgen dat je de goede formatering hebt.

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:01

Basszje

Reisvaap!]

Topicstarter
Op donderdag 13 september 2001 13:07 schreef klokkie het volgende:
Volgens mij werkt SQL niet met data's volgens de systeeminstellingen. Standaard gebruikt SQL namelijk MM/DD/YYYY.

Als je met ADO je database benadert d.m.v. recordset objecten dan zorgt ADO ervoor dat alles goed gaat met je data.

Mocht je runtime een query moeten samenstellen met een datum erin, gebruik dan de Month(), Day() en Year() functies om te zorgen dat je de goede formatering hebt.
Het probleem alleen is dat interbase alleen met timestamps werkt, je kan wel een date sturen, maar alleen in USA format.

Dus je moet constant converteren van NL dates ( uit ASP ) naar USA dates ( database ) en op het scherm de goede waardes tonen.

Dus een geconverteer en foutgevoeligheid. Desnoods sla ik de timestamp trouwens op al int of double...

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

en als je nu met datediff het verschil berekent tussen 31jan1899 en b.v. vandaag?
krijg je het aantal dagen sindsdien en dus een timestamp, lijkt me?

kaart != map && bottel != fles
Wacht op antwoord


  • Splatter
  • Registratie: December 2000
  • Laatst online: 26-11-2021
DE functie DateDiff() rekent het aantal tijdseenheden van tijd1 tot tijd2 uit
DateDiff("d", "01-01-1970", TxtDatum.value) is hetzelfde als een Unix timestamp uit PHP dachtik.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
een timestamp zal niet gaan (standaard) aangezien het een aantal seconden na 1970 is ofzo...

ik denk dat je bedoeld een huidige datum, bijv. de datum dat iemand iets toevoegd aan de DB ofzo...

ik gebruik daarvoor now()


werkt prima

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 17-09 14:44

Jaspertje

Max & Milo.. lief

het enige probleem met NOW is dat die een nederlandse waarde meegeeft: dd/mm/yyyy, alleen de database kent alleen de noordamerikaanse standaard: mm/dd/yyyy en als je dan voorbij de 13e van de maand bent kent ie die niet meer.

wat al eerder gezegt is heb ik ff uitgewerk met een datadiff:
code:
1
2
3
4
5
6
7
8
<%dim strdatumnumeric
strdatumnumeric=datediff("D",cdate(0),now)


dim strdatumdatum
strdatumdatum=cdate(strdatumnumeric)

%>

Hij zet alle tijd data als een numerieke waarde in de database en haalt em er dan weer uit en zet m weer om naar datum. Alleen als je waarde van onder 1899 hebt heb je een probleem

Verwijderd

Nog niemand op het briljante idee gekomen om
code:
1
Session.LCID = 1043

te doen zodat je altijd nederlandse datums hebt ongeacht van waar je server op staat?

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:01

Basszje

Reisvaap!]

Topicstarter
Doh, maar session.lcid is ook niet betrouwbaar.

En bovendien moet je dan bij het inserten van je datum weer terug gaan naar 1033 ( usa format ) ,omdat interbase alleen dat slikt.

En da's erg foutgevoelig.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Verwijderd

Als Interbase graag amerikaanse datums wil hebben dan geef je interbase toch amerikaanse datums?

Oftewel zoiets als:
code:
1
2
con.Execute "UPDATE tblMyTable SET Date='" & _
Month(Now()) & "/" & Day(Now()) & "/" & Year(Now()) & "'"

Waarom zou dit niet werken?

edit:
Even zo geschreven dat het niet de hele pagina ver***

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:01

Basszje

Reisvaap!]

Topicstarter
Da's ook irri als je niet zeker weet welke taal je server draait ( moet op meerdere server-instellingen kunnen draaien, ik heb het ook niet verzonnen ) .

De oplossing die ik nu gebruik met een eigen functie stamp en unstamp.

De ene die gewoon now( timestamp ) .

De ander andersom via DateDiff , en als basis gebruiken cdate(1) .. (en dan de secondes tellen )

[edit]
now(0) = cdate(1)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 11:01

Basszje

Reisvaap!]

Topicstarter
update :

Ik ben aan de slag gegaan met mijn idee, maar het is niet helemaal gelukt.
Dit kwam omdat mijn script vanaf de basisdatum (cdate(1)) het aantal secondes optelde. Maar cdate werkt alleen met dagen , dus kreeg ik een gigantische date overflow.

Nu heb ik dat gefixt met een conversie van mijn timestamp naar dagen en die uit te spuwen.

Mocht je het zelf ook willen proberen.
Zo heb ik het gedaan
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function Stamp(datum)
    response.write datum
    if not isdate(datum)  then
        stamp = ""
        exit function
    end if 
 
    Stamp = dateDiff("S",cdate(1),datum)
end function

function UnStamp(timestamp)
    dim StampIndays, SecondsInDays, FullDays, dayDate
    ' vertaal de seconden timestamp naar gebroken stamp in dagen
    StampIndays = timestamp / 60 / 60 / 24

    ' haal hele dagen op
    FullDays = fix(StampInDays)
    
    ' haal de restende dag value eruit
    SecondsInDays = StampInDays - FullDays

    
    ' maak van basisjaar de dagen in dagen
    dayDate = DateAdd("D",FullDays,cdate(1))
    ' tel daarbij resterende secondes op ( maak eerst secondes van dag getal)
    Unstamp = dateAdd("S",secondsindays * 24 * 60 * 60 ,dayDate)
end function

Trouwens moet je in Acces een numeriek veld met een dubbele precisie ( een double dus ) definieren. Anders doet ie het niet :) .

Ik ga naar de kroeg. Dit was weer mijn bijdrage voor vandaag :)

edit:

foutje.,.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 17-09 14:44

Jaspertje

Max & Milo.. lief

basszje je bent een held, alhoewel die van mij ook werkt

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 16-09 08:48
basszje je bent een held, alhoewel die van mij ook werkt
Held! :P

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

kweet nie, format("DDMMYY", date) gaat toch wel wat sneller en kun je makkelijk alles mee opzoeken.

alleen nie wat het verschil tussen nu en toen is, mar werkt wel een poepie sneller.

scheelt 20 regels

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Die laatste opmerking slaat kont >:)

Zowel de database als VB kent een datum/tijd type. Daarin staat zoiets als het aantal milliseconden sinds 1970 (SQL Server en Javascript doen het elkgeval zo).

Als je Response.Write Now doet, dan denkt VB(S), aan een lang getal heeft de gebruiker niets, ik converteer het naar een string, volgens de Locale instellingen (regio enzo). En ja, dat is op elk systeem anders.

Als je software voor een server schrijft, moet je dus geen Locale-afhankelijke functies gebruiken! Dus alles wat een datum-type naar een string converteert.

Maar ook het verschil tussen . , en ; (wat is het, lijst-, decimaal- of duizendtallen-scheidingsteken).

VB is wat dat betreft slecht gedocumenteerd voor server-based developers :(
Pagina: 1