2011-01-16 7 views
4

開発マシンでこのテストコードを実行すると、期待通りに動作します。 CF9.01サーバーロケールが正しく設定されているにもかかわらず、サーバー上のLSParseDateTime関数で問題が発生する

テストマシン上の9月10日1957年

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

出力が

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

同じである1957年10月9日ので、私はユーロの日付形式を使用して、ヨーロッパにいますコード、ライブサーバーの出力は

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

サーバーOSはWindows Web Server 2008 R2です。コントロールパネル>日付と時刻の設定をチェックしましたが、正しくロンドンに設定されています。 WebサーバーはIIS7ですが、それは何かに影響するとは思いませんか?地域と言語の

、場所がイギリスに設定され、管理(変更システムロケール)で、それはまた、英語(イギリス)

アップデートとして正しいです:限りCFが懸念しているとして、それは、サーバーがあると考えて米国のロケールでこれを実行する

...

<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> 

は、この出力にサーバ設定の

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'} 

しかし、ここでの確認を提供します。コードであるsetLocaleと

alt textalt text

強制ロケールが動作を修正するために解決します。

答えて

4

別のオプションは、このサンプルを検討SetLocaleを使用してロケールを強制することです:

<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> 

私はウクライナにいると、その出力は次のようになります。

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'} 

を明らかに、ParseDateTime作品どのロケールでも同じですが、LSParseDateTimeは必要な作業を行います。

+0

Sergiiさんに感謝し、ロケールを強制します。不思議なことに、CFは私の設定にもかかわらず、サーバが米国のロケールにあると思っています.setlocaleを使うと正しく動作します。 – Saul

+0

それはロケールだった:) setLocale()の+1。 –

1

私はこれはあなたのタイムゾーンではなくロケールと関係があります。

ライブサーバー上のロケールは、10月9日に10/09/1957と表示されているように、米国に設定されているように見えますが、テストサーバーは9月10日の英国スタイルです。

サーバーのローカル設定を比較する必要があります。

地域を試す&言語 - >管理(タブ) - >システムロケールを変更して比較してください。

希望に役立ちます!

+0

私はそのCiaranを見ました。正しく設定されているようです。質問に追加しました – Saul

+0

他の投稿ごとにロケールを強制的に疲れましたか?月/日の混乱は非常に疑わしいように見えます。 –

関連する問題