drupal 8.でカスタム連絡先フォームを開発する必要があります。すべてのフィールドを追加できますが、日付と時刻のフィールドに来て、デフォルト値を現在の日付に設定できません。
これは私の日付フィールドコードです
$form['start_date'] = [
'#type' => 'datetime',
'#title' => t('Start Date'),
'#description' => date($date_format, time()),
'#default_value' => time(),
];
drupal\Core\Datetime\DrupalDateTimeを使用します。
そして形で
$form['start_date'] = array(
'#type' => 'datetime',
'#title' => t('Start Date'),
'#default_value' => DrupalDateTime::createFromTimestamp(time()),
);
_#default_value
_ datetimeフィールド要素には、日付文字列ではなく DrupalDateTime
オブジェクトが必要です。
_use Drupal\Core\Datetime\DrupalDateTime;
$form['start_date'] = [
'#type' => 'datetime',
'#title' => t('Start Date'),
'#description' => date($date_format, time()),
'#default_value' => new DrupalDateTime('1978-11-01 10:30:00', 'Europe/Berlin'),
];
_
詳細については、APIドキュメントの Datetime::processDatetime()
& Datetime
を参照してください。
Drupal 8.も使用します。この ディスカッション は重要なポイントを提起します-日付形式が一致していることを確認してください。
日付をd/m/Yとして表示したかったのですが、日付フィールドで使用されるデフォルトの形式ではありません。
$today = date("Y-m-d");
$form['general']['endDate'] = ['#type' => 'date','#date_format' => 'd/m/Y','#title' => t('End date'),'#default_value' => $today,];
手がかりは生成されたHTMLにありました:
data-drupal-date-format="Y-m-d"
ディスカッションではデフォルトを変更できると述べられていますが、私はその命題を検証しませんでした。
Drupal 8の場合、次のコードが機能します。
// buildForm()内のフォーム要素。
$form['start_date'] = [
'#type' => 'datetime',
'#title' => t('Start Date'),
'#default_value' => DrupalDateTime::createFromTimestamp(strtotime($config->get('start_date')))
];
// submitForm()の内部。
->set('start_date', (string) $form_state->getValue('start_date'))