it-swarm.com.de

Programmgesteuert ein Datum / Uhrzeit-Feld festlegen

Ich habe bereits eine solche Frage gestellt ( Datumsfeld in D8 einstellen ).

Ok doppelter Eintrag? NEIN!

Jetzt muss ich auch eine Zeit einstellen und ich benutze ein Array. Mein Code sieht so aus.

$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,
];

UPDATE: Ein weiterer Versuch für das Datum/Uhrzeit-Feld:

'field_event_date_start' => array(
    "value" => array(
        "date" => date('Y-m-d',$imported_date),
        "time" => date('H:i:00',$imported_date)
    ),
),

Jetzt wird folgende Fehlermeldung angezeigt: Platzhalter müssen ein abschließendes [] haben, wenn sie mit einem Array von Werten erweitert werden sollen.

5
themca

Datetime-Felder in Drupal 8 werden als Zeichenfolgen gespeichert. Sie müssen sie also in Zeichenfolgen konvertieren.

Sie können die Formatierungsmethode verwenden, z.

$formatted_date = $date->format('Y-m-d H:i:s');

Siehe Einfügen des Werts aus dem Datetime-Feld

Sie können T auch als Trennzeichen verwenden.

Mögen:

\DateTime::format("Y-m-d\TH:i:s"); //need a escape character in front of T.

Siehe Warum wird mein Datetime-Feld nicht gespeichert?

12
DRUPWAY

Wenn Ihr Datumsfeld kein DATUM/UHRZEIT , sondern ein DATUM ist, verwenden Sie ein anderes Format . Eine bessere Lösung wäre die Verwendung der Datime-Objektkonstante, um das Format abzurufen.

constant DATETIME_STORAGE_FORMAT :: string(12) "Y-m-d\TH:i:s"
constant DATE_STORAGE_FORMAT :: string(5) "Y-m-d"

Arbeitsbeispiel.

$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

Dies funktioniert, wie bereits erwähnt, hervorragend für Datumsfelder. Wenn Sie jedoch ein zeitstempelbasiertes Feld aktualisieren müssen, verwenden Sie Folgendes:

 $entityref->set('field_timestamp_field', $source_date->getTimestamp());
0
ben.hamelin