[asp] Hoe lokale tijd omzetten naar GMT???

Pagina: 1
Acties:

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
In dit topic had ik reeds gemeld dat ik bezig was met het maken van een XML output van de active topics voor het Snitz Forum omdat ik daar zelf ook gebruik van maak!!!

Nu loop ik momenteel tegen de volgende vraag aan.

VRAAG:
Hoe kan ik de tijd op een generieke manier converteren naar GMT (GreenWhich Time). Zodat het werkt voor alle Tijd zones.

Momenteel maak ik gebruik van de volgende functie om de Snitz DateTime te converteren. Het format zoals deze wordt aangeleverd ziet er als volgt uit:

Aangeleverd Format:
• 20020329072313

PHP:
1
<?unction getUnixTimeStamp(SnitzDT)' ** Details: This function changes the Snitz Format of the DataTime to the **''             Unix Timestamp                                                **'' ** Input:   SnitzDT;  This is a string format of a datetime               **'Dim oDate    oDate = cDate("1/1/70 12:00:00 AM")    '** Date Conversion Part **'    getUnixTimeStamp =     Mid(SnitzDT,5,2) &amp; "/" &amp; _                Mid(SnitzDT,7,2) &amp; "/" &amp; _                Mid(SnitzDT,1,4)            '** Time Conversion Part **'    if cint(Mid(SnitzDT, 9,2)) > 12 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    (cint(Mid(SnitzDT, 9,2)) -12) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "PM"    elseif cint(Mid(SnitzDT, 9,2)) = 12 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    cint(Mid(SnitzDT, 9,2)) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "PM"    elseif cint(Mid(SnitzDT, 9,2)) = 0 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    (cint(Mid(SnitzDT, 9,2)) +12) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "AM"    else        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    Mid(SnitzDT, 9,2) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "AM"    end if    getUnixTimeStamp = cDate(getUnixTimeStamp)    getUnixTimeStamp = DateAdd("h", -2, getUnixTimeStamp)    getUnixTimeStamp = (getUnixTimeStamp - oDate) * 24 * 3600end function?>

PHP voor de kleurtjes :-)

Bovengenoemde functie converteerd het dan naar:

Geconverteerd Formaat:
• 1017379393


Nu is het zo dat ik hetvolgende stukje:
code:
1
    getUnixTimeStamp = DateAdd("h", -2, getUnixTimeStamp)

Graag wil generaliseren zodat het door alle tijdzones kan worden gebruikt! Momenteel trek ik er gewoon 2 uur vanaf en dan werkt het ook, maar helaas alleen voor onze tijdzone :(

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Nou, ik ben nog even aan het knutselen en het zoeken geweest wat blijkt:
  • VBScript ondersteunt een toGMT functie niet
  • Je kan wel JScript en VBScript door elkaar gebruiken
Met dit gegeven heb ik de volgende functie gemaakt (welke wel tussen hetvolgende staat:<script language="JScript" runat="Server">):
PHP:
1
<?    function toGMT(LocalDate) {      var dt = new Date(LocalDate);      var datastr = dt.toGMTString();      return datastr;    }?>

PHP voor de kleurtjes :-)

Deze functie geeft echter de volgende waarde terug:

Teruggegeven waarde:
[list]<li> Sat, 4 May 2002 09:34:22 UTC
[/list]</li>


Weet iemand hoe ik dit dan kan weergeven in een normaal te gebruiken formaat, want de volgende twee methoden geven beiden een FOUT resultaat:
code:
1
2
3
getUnixTimeStamp = toGMT(getUnixTimeStamp)
getUnixTimeStamp = cDate(getUnixTimeStamp)
getUnixTimeStamp = FormatDateTime(getUnixTimeStamp,0)

Het converteren gaat goed, maar bij beide volgende functie krijg ik een 'Type Mismatch'.

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Woudloper:
Nu is het zo dat ik hetvolgende stukje:
code:
1
    getUnixTimeStamp = DateAdd("h", -2, getUnixTimeStamp)

Graag wil generaliseren zodat het door alle tijdzones kan worden gebruikt! Momenteel trek ik er gewoon 2 uur vanaf en dan werkt het ook, maar helaas alleen voor onze tijdzone :(
Yes, ik heb eindelijk een generale oplossing gevonden. Ik ben nog een tijdje aan het spelen geweest met het combineren van JSCRIPT met VBSCRIPT en uiteindelijk heb ik het volgende gedaan:

Binnen JSCRIPT heb ik de volgende functie gemaakt:
PHP:
1
<?<script language="JScript" runat="Server">    function getTZOffzet() {        var dt = new Date();        return dt.getTimezoneOffset();    }</script>?>

En de andere functie het ik alsvolgt gemaakt:
PHP:
1
<?function getUnixTimeStamp(SnitzDT)' ** Details: This function changes the Snitz Format of the DataTime to the **''             Unix Timestamp                                                **'' ** Input:   SnitzDT;  This is a string format of a datetime               **'Dim oDate    oDate = cDate("1/1/70 12:00:00 AM")    '** Date Conversion Part **'    getUnixTimeStamp =     Mid(SnitzDT,5,2) &amp; "/" &amp; _                Mid(SnitzDT,7,2) &amp; "/" &amp; _                Mid(SnitzDT,1,4)            '** Time Conversion Part **'    if cint(Mid(SnitzDT, 9,2)) > 12 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    (cint(Mid(SnitzDT, 9,2)) -12) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "PM"    elseif cint(Mid(SnitzDT, 9,2)) = 12 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    cint(Mid(SnitzDT, 9,2)) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "PM"    elseif cint(Mid(SnitzDT, 9,2)) = 0 then        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    (cint(Mid(SnitzDT, 9,2)) +12) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "AM"    else        getUnixTimeStamp =     getUnixTimeStamp &amp; " " &amp; _                    Mid(SnitzDT, 9,2) &amp; ":" &amp; _                    Mid(SnitzDT, 11,2) &amp; ":" &amp; _                    Mid(SnitzDT, 13,2) &amp; " " &amp; "AM"    end if    getUnixTimeStamp = cDate(getUnixTimeStamp)    getUnixTimeStamp = DateAdd("n", getTZOffzet(), getUnixTimeStamp)    getUnixTimeStamp = (getUnixTimeStamp - oDate) * 24 * 3600end function?>

Zoals je kan zien maak ik binnen de DateAdd functie gebruik van de functie getTZOffzet(), deze geeft namelijk het verschil in minuten weer met het GMT.

Dit alles geeft nu het gewenste resultaat! Perfect *D