2011-01-16 2 views
4

Wenn ich diesen Testcode auf meinem Entwicklungscomputer ausführe, funktioniert er wie erwartet. CF9.01Problem mit der LSParseDateTime-Funktion auf dem Server nur, obwohl das Servergebietsschema richtig eingestellt ist

ich in Europa bin Euro Datumsformat so ist 1957.10.09 10. 1957 September

<cfset testDate="10/09/1957"> 
<cfoutput> 
Initial string = "#testDate#"<br> 
LSparsedatetime output = #lsparsedatetime(session.form.patientDOB)#<br> 
parsedatetime output = #parsedatetime(session.form.patientDOB)# 
</cfoutput> 

Ausgabe am Testmaschine

Initial string = "10/09/1957" 
LSparsedatetime output = {ts '1957-09-10 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 

Same ist Code, Ausgabe am Live-Server ist

Initial string = "10/09/1957" 
LSparsedatetime output = {ts '1957-10-09 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 

Server-Betriebssystem ist Windows Web Server 2008 R2. Ich habe das Kontrollkästchen Systemsteuerung> Datum und Uhrzeit aktiviert und es ist korrekt auf London eingestellt. Webserver ist IIS7, aber ich glaube nicht, dass das etwas bewirken würde? soweit CF betrifft es denkt, dass der Server ist:

IN Region und Sprache, ist die Lage nach Großbritannien und in den Verwaltungs (Wechselsystem locale) es richtig ist, auch als English (United Kingdom)

-Update eingestellt auf US-Gebietsschema.

das Lauf ...

<cfset testDate="10/09/1957"> 
<cfoutput> 
Initial string = "#testDate#"<br> 
#getLocale()#:<br> 
LSparsedatetime output = #lsparsedatetime(testDate)#<br> 
parsedatetime output = #parsedatetime(testDate)#<br> 
<P> 
<cfset SetLocale("en_GB") /> 
en_GB:<br> 
LSparsedatetime output = #lsparsedatetime(testDate)#<br> 
parsedatetime output = #parsedatetime(testDate)#<br> 
</cfoutput> 

gibt diese Ausgabe

Initial string = "10/09/1957" 
English (US): 
LSparsedatetime output = {ts '1957-10-09 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 
en_GB: 
LSparsedatetime output = {ts '1957-09-10 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 

Aber hier Bestätigung der Servereinstellungen.

alt text alt text

Erzwingen locale mit setLocale im Code löst Verhalten zu korrigieren.

Antwort

4

Eine weitere Option ist das Gebietsschema zu zwingen SetLocale verwenden, sollten Sie dieses Beispiel:

<cfset testDate="10/09/1957"> 
<cfoutput> 
Initial string = "#testDate#"<br> 
#getLocale()#:<br> 
LSparsedatetime output = #lsparsedatetime(testDate)#<br> 
parsedatetime output = #parsedatetime(testDate)#<br> 
<cfset SetLocale("en_US") /> 
en_US:<br> 
LSparsedatetime output = #lsparsedatetime(testDate)#<br> 
parsedatetime output = #parsedatetime(testDate)#<br> 
<cfset SetLocale("en_GB") /> 
en_GB:<br> 
LSparsedatetime output = #lsparsedatetime(testDate)#<br> 
parsedatetime output = #parsedatetime(testDate)#<br> 
</cfoutput> 

ich in der Ukraine bin, so dass die Ausgabe sieht wie folgt aus:

Initial string = "10/09/1957" 
uk_UA: 
LSparsedatetime output = {ts '1957-09-10 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 
en_US: 
LSparsedatetime output = {ts '1957-10-09 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 
en_GB: 
LSparsedatetime output = {ts '1957-09-10 00:00:00'} 
parsedatetime output = {ts '1957-10-09 00:00:00'} 

Offensichtlich ParseDateTime arbeitet die Gleiches mit jedem Gebietsschema, aber LSParseDateTime erledigt die benötigte Arbeit.

+0

Danke Sergii, erzwingt das Gebietsschema funktioniert. Seltsamerweise denkt CF, dass sich der Server trotz meiner Einstellungen auf dem Gebietsschema "US" befindet. Die Verwendung von "setlocale" sorgt dafür, dass er korrekt funktioniert. – Saul

+0

So war das Gebietsschema :) +1 für setLocale(). –

1

Ich Thinnk das ist mit Ihrer Locale, nicht Ihre Zeitzone zu tun.

Ihr Gebietsschema auf Ihrem Live-Server scheint auf US eingestellt zu sein, da es am 09.10.1957 den 9. Oktober anzeigt, während Ihr Testserver den UK-Stil sieht, also den 10. September.

Sie müssen die lokale Einstellung auf den Servern vergleichen.

Testen Sie die Region & Sprache -> Administrative (Registerkarte) -> System Locale ändern und vergleichen.

Hoffe, dass hilft!

+0

Ich schaute auf diesen Ciaran und es scheint richtig eingestellt. Zu Frage hinzugefügt – Saul

+0

Haben Sie müde, locale wie der andere Beitrag zu zwingen? Die Verwechslung zwischen Monat und Datum sieht sehr verdächtig aus. –

Verwandte Themen