J'ai déjà posé une question comme celle-ci ( Définir le champ de date dans D8 ).
Ok entrée en double? NON!
Maintenant, je dois également définir une heure et j'utilise un tableau. Mon code ressemble à ceci.
$field_array = [
##begin of creating node
'uid' => $new_old_uid["new_uid"],
'type' => $content_type,
'langcode' => $lang,
'status' => (!empty($import_node->status)) ? $import_node->status : 0,
#### How to create date with times?
#Every Version causes that error -> Array to string conversion in ....
### Version 1
'field_event_date_start' => [[ "value"=> date('Y-m-d H:i:00',$imported_date) ]],
'field_event_date_end' => [[ "value"=> date('Y-m-d H:i:00',$imported_date) ]],
### Version 2
'field_event_date_start' => [ "value"=> date('Y-m-d H:i:00',$imported_date) ],
'field_event_date_end' => [ "value"=> date('Y-m-d H:i:00',$imported_date) ],
### How to add a url?
'field_event_url' => (!empty($import_node->field_event_url)) ? array('value'=> $imported_url) : null,
];
MISE À JOUR: Un autre essai pour le champ datetime:
'field_event_date_start' => array(
"value" => array(
"date" => date('Y-m-d',$imported_date),
"time" => date('H:i:00',$imported_date)
),
),
Maintenant, j'obtiens l'erreur suivante: les espaces réservés doivent avoir un signe de fin [] s'ils doivent être développés avec un tableau de valeurs.
Les champs Datetime dans Drupal 8 sont stockés sous forme de chaînes. Vous devez donc les convertir en chaîne.
Vous pouvez utiliser la méthode de formatage, par ex.
$formatted_date = $date->format('Y-m-d H:i:s');
Reportez-vous en insérant la valeur du formulaire de champ Datetime
Vous pouvez également utiliser T comme séparateur,
Comme:
\DateTime::format("Y-m-d\TH:i:s"); //need a escape character in front of T.
Reportez-vous Pourquoi mon champ Datetime n'est-il pas enregistré?
Si votre champ de date n'est pas un DATETIME mais un DATE , utilisez un format différent . Et une meilleure solution serait d'utiliser la constante d'objet Datime pour obtenir le format.
constant DATETIME_STORAGE_FORMAT :: string(12) "Y-m-d\TH:i:s"
constant DATE_STORAGE_FORMAT :: string(5) "Y-m-d"
Exemple de travail.
$dtime = DateTime::createFromFormat("m/d/Y - G:i", $row->Date); // not needed
$dtime->setTimezone(new \DateTimezone(DateTimeItemInterface::STORAGE_TIMEZONE));
$dtimeFormat = $dtime->format(DateTimeItemInterface::DATE_STORAGE_FORMAT);
$article->set('field_date', $dtimeFormat);
Cela fonctionne très bien pour les champs de date, comme indiqué. Cependant, si vous devez mettre à jour un champ basé sur l'horodatage, utilisez quelque chose comme:
$entityref->set('field_timestamp_field', $source_date->getTimestamp());