Date/Time Webform要素の値をDate/Timeフィールド記事ノードに設定します。
以下は、日付/時刻Webフォーム要素のソースコードです(
expiry_date:
'#type': datetime
'#title': 'Expiry Date'
'#title_display': before
'#required': true
'#required_error': 'You must add an expiry date'
'#date_date_format': ''
'#date_year_range': '2019:2100'
'#date_time_format': ''
以下は私のカスタムハンドラです:
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get 'Expiry Date' Value.
$ExpiryDate = $values['expiry_date'];
date_default_timezone_set('UTC'); // Sett the time to 'UTC' time zone.
// Format the "Expiry Date" to return "Y-m-d\TH:i:s".
//$FormattedExpiry = date('Y-m-d\TH:i:s', $ExpiryDate);
// Create a new "Article" node.
$article = \Drupal\node\Entity\Node::create([
'type' => 'article',
// Set the node field values.
'title' => $Title,
'langcode' => 'en',
'uid' => $CurrentUid,
'status' => '1',
'created' => $current_time,
'field_expiry_date' => $ExpiryDate, // $FormattedExpiry,
]);
// Save the created node.
$article->save()
しかし、私は以下のエラーに直面しています:
Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'field_expiry_date_value' at row 1: INSERT INTO {node__field_expiry_date} (entity_id, revision_id, bundle, delta, langcode, field_expiry_date_value) VALUES (
:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5);
Array (
[:db_insert_placeholder_0] => 84
[:db_insert_placeholder_1] => 88
[:db_insert_placeholder_2] => article
[:db_insert_placeholder_3] => 0
[:db_insert_placeholder_4] => en
[:db_insert_placeholder_5] => 2021-05-25 11:26:02 +03:00
)
in Drupal\Core\Entity\Sql\SqlContentEntityStorage->saveToDedicatedTables() (line 1414 of /home/username/public_html/example.com/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
Webformの_expiry_date
_は_2021-05-25 11:26:02 +03:00
_のようなものを返すため、次のように作成するために渡す前にフォーマットする必要があります。
_// Get 'Expiry Date' Value.
$ExpiryDate = $values['expiry_date'];
// Format the "Expiry Date" to return "Y-m-d\TH:i:s".
// Here use strtotime to format date correctly
$FormattedExpiry = date('Y-m-d\TH:i:s', strtotime($ExpiryDate));
_
次に、_$FormattedExpiry
_の代わりに_$ExpiryDate
_を渡します。
_$article = \Drupal\node\Entity\Node::create([
'type' => 'article',
// Set the node field values.
'title' => $Title,
'langcode' => 'en',
'uid' => $CurrentUid,
'status' => '1',
'created' => $current_time,
'field_expiry_date' => $FormattedExpiry,
]);
_
更新:あなたの日付にはすでに+ 3hがあり、3時間を時間に追加したくない場合は、2つのオプションがあると思います:
$values['expiry_date']
_のような_2021-05-25 11:26:02
_のような_+03:00
_のような値を取得するためにUTCで動作するようにWebフォームフィールド設定を変更します_+03:00
_から日付変換前の_$values['expiry_date']
_を削除するには、次のように_$ExpiryDate = $values['expiry_date'];
_の行を変更します。
$ExpiryDate = explode('+', $values['expiry_date'])[0];