web-dev-qa-db-fra.com

Définir par programme un champ datetime

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.

5
themca

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é?

12
DRUPWAY

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);
3
Pauleau

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());
0
ben.hamelin