3

クエリを実行すると:

<cfquery name="gGet" datasource="#application.datasource#">
   select dateuploaded from table
</cfquery>

次のように素敵な日時を取得します。

2012-12-01 12:46:00 

しかし、新しいクエリ オブジェクトを作成して日時を挿入すると、

<cfset qReturn = queryNew("deployDate", "Date")>
<cfoutput query="qGet" startrow="1" maxrows="7">
    <cfset queryAddRow(qReturn)>
    <cfset querySetCell(qReturn,"deployDate",qGet.dateuploaded)>
</cfoutput>

私はこのひどいタイムスタンプのゴミを手に入れます{ts '2012-12-01 12:46:00'}

日時を保持するにはどうすればよいですか?

または、タイムスタンプを日時に再フォーマットするにはどうすればよいですか?

4

1 に答える 1

0

ほとんどの場合、あなたは何も心配していません。メソッドが呼び出されたときに日付/時刻オブジェクトが返すものを見ているだけですtoString。ColdFusion はこれを使用して、画面に何かを出力することができます (文字列データである必要があります)。見ているさまざまな値はすべて完全に有効な日付/時刻型であり、クラスが異なるだけで実装がtoString異なります。コードは、値の文字列表現ではなく、オブジェクトを処理するため、これは問題ではありません。

DBの結果または構築されたクエリのいずれかから生の値をフォーマットせずに出力するだけのように聞こえます。したがって、CFはデフォルトtoStringのメソッドを介して文字列に変換する必要があり、上記で述べたように、toStringメソッドはDateTimeの実装ごとに異なります(DB からのオブジェクトのクラスは、CF が独自の日付オブジェクトに使用するものとは異なるため、表示toStringされている実装が異なります)。あなたがここにいるように、何が出力されているかをにするなら、決してそれをすべきではありません。表示に使用される形式が気になる場合は、常に DateTime オブジェクトを自分で文字列に変換してください。

<cfoutput>#gGet.dateuploaded[1].dateTimeFormat("yyyy-mm-dd HH:nn:ss")#</cfoutput>

<cfoutput>#qReturn.deployDate[1].dateTimeFormat("yyyy-mm-dd HH:nn:ss")#</cfoutput> (それぞれ、提供された情報に基づきます)。

これにより、デフォルトを使用するために CF に任せるのではなく、指定した形式で日付オブジェクトの値が返されて表示されます。

これはdisplayに対してのみ行ってください。日付操作については、そのままにしておきます。CFML の日付が単なる人間が読み取れる文字列ではなくオブジェクトであることを理解していないため、ここで何か「間違っている」と認識しているだけです。しかし、CF はこれで混乱することはありません ;-)

見たい場合は、日付/時刻オブジェクトとその文字列表現に関するこの記事で、これについてより明確に (そしてより多くのスペースを占有して) 説明します。

于 2012-12-01T10:03:03.150 に答える