カレンダフィールドの入力をJTable :: storeに保存したいと思います。
そうするために私はこれをやっています:
フォーム宣言:
<field name="creationdate"
type="calendar"
default="NOW"
label="COM_BESTIA_FIELDS_CREDITCREATIONDATE_LABEL"
description="COM_BESTIA_FIELDS_CREDITCREATIONDATE_DESC"
format="%d.%m.%Y %H:%M"
filter="user_utc"/>
JTableのStore-Method:
if ( !empty( $input[ 'creationdate' ] ) && !( $input[ 'creationdate' ] == "0000-00-00 00:00:00" ) ) // Prepare date to be saved in database
{
// Set this to a format the sql-table is able to save
$date = JFactory::getDate($input[ 'creationdate' ]);
$this->creationdate = $date->toSql();
}
else
{
throw new Exception(JText::_('COM_BESTIA_ERROR_INCORRECTDATES'));
}
これは正常に動作します。出力をvar_dumpした場合
var_dump(JFactory::getDate($input[ 'creationdate' ])->toSql());
var_dump(JFactory::getDate($this->creationdate)->toSql());
私はこの結果を得ています:
string(19) "2016-05-13 09:30:00" string(19) "2016-05-13 09:30:00"
正解です。
しかし、別の形で私はこの結果を得ています:
XML:
var_dump:
var_dump(JFactory::getDate($input[ 'creationdate' ])->toSql());
var_dump(JFactory::getDate($this->creationdate)->toSql());
結果:
string(16) "13.05.2016 09:41" string(19) "2016-05-13 07:41:00"
なぜ異なる値を取得しているのですか?
編集:$this->creationdate
の代わりに入力を使用する理由は、CLIスクリプトを使用して要素を作成しているためです。そして、今までは、入力ではなく$this->creationdate
を使用すると、データベースに値を取得できませんでした。
このためのコードを見ました。 JDate :: dateformatはパブリックです。つまり、どのコードでも値を変更できます。ソースツリー(およびすべてのプラグイン/モジュール/ライブラリ)でgrep/searchを実行して、割り当てを探します。
時差の問題を見ると、JFactory()が2つの異なる方法で日付を構築していると思います。 1つ目は、$ input ['creationdate']の値で、文字列を渡します。 2番目は数値を渡すことです。 JDate()のコンストラクタを見ると、日付引数が数値の場合、タイムスタンプがUTCに変換されます。
また、date-> getTimezone()の値をダンプして調べる必要もあります。