web-dev-qa-db-ja.com

段落の日付フィールドの月、日、年のドロップダウンをプログラムで設定するにはどうすればよいですか?

段落を作成するときに、プログラムで基本的な日付フィールド(および他のいくつかのテキストフィールド)を設定しています。データベースは、_Y-m-d\TH:i:s_形式で保存されている日付を取得していることを示しています。他のすべてのデータも同様に保存されています。エラーはありません。

ただし、段落がアタッチされているノードを編集すると、日付フィールドを除くすべてのデータがそこにあります。データベースにデータがあるにもかかわらず設定されていません。

日付フィールドは、次のようなドロップダウンにMDYを表示するように設定されています。

enter image description here

私はこれを試しました:$date = new DateTime('2015-06-01 23:45:52', new \DateTimeZone('UTC'));これはデータベースに保存された日付を取得しますが、ドロップダウンは設定されていません。

それで、それをMDYに変換してみました:$date->format('M-D-Y')が、そのような運はありませんでした。これはまったく機能しません。

また、$date->format(DATETIME_DATETIME_STORAGE_FORMAT)を使用して実際に保存された形式を参照する必要があることも確認しましたが、必要な形式に変換するためのパラメーターが他にないようです。

コードで実際のドロップダウンオプションを個別に設定する方法はありますか?

以下の完全な段落コード。これらの例のほとんどすべてがデータをDBに正しく保存しますが、日付のドロップダウンはそれを参照しません。

_use Drupal\Core\Url;
use Drupal\node\Entity\Node;
use Drupal\file\Entity\File;
use Drupal\paragraphs\Entity\Paragraph;
use Drupal\taxonomy\Entity\Term;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
use Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeCustomFormatter;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
use Drupal\datetime_range\DateTimeRangeTrait;    

  $date = new DateTime('2015-06-01 23:45:52', new \DateTimeZone('UTC'));
  //$date = $date->format('Y-m-d\TH:i:s');
  // if ($date instanceOf DrupalDateTime && !$date->hasErrors()) {
  //   $currentDate->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE));
  //   $db_friendly_value = $currentDate->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT);
  // }

  //$date->setTimezone(new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE));
  //$date = $date->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT);
  // $date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE));

      $program_1 = Paragraph::create([
        'type' => 'programs',
        'field_program_name' => 'Program Name',
        'field_program_description' => 'Description',
        'field_program_year' => [
          'value' => $date,
        ],
      ]);
      $program_1->save();
_

どこかに行方不明ですか?私はこれを行うための正しい方法を数日間探し求めており、さまざまな方法を試してきました。フィールドをドロップダウンではなくテキスト(日付/時刻)日付フィールドに変更するだけで、おそらくこれを回避できます。

私はここで提案を試しましたが、これも機能しないようです: 段落日付フィールドにコンテンツを追加Drupal 8

ここに何かアイデアはありますか?

1
Jason Glisson

私が見つけることができた日付のほぼすべての解決策を試した後、私は最終的にこれを理解しました。

DBが日付を何に保存したいかは問題ではないようです。 DBを見ると、日付は、末尾のY-m-dなしでH:i:sとして格納されています。ほとんどの例では、Y-m-d\TH:i:s形式の完全な日付が必要であると述べています。

日付フィールドのこの特定のドロップダウンウィジェットではY-m-dのみが必要であり、すべての種類の異なる日付文字列を渡そうとした後でのみ、末尾のH:i:sなしでフォーマットに関するエラーメッセージが返されたことがわかりました。

だから、私がそれを以前に渡そうとしたゴミとフォーマットのすべてがかなりうまくいかなかった。私がする必要があるすべてはこれであり、段落は適切に保存され、フォームフィールドは適切な日付を反映しています。

'field_program_year' => date('Y-m-d', strtotime('2011-11-12')),
'field_eligibility_range' => [
  'value'=> date('Y-m-d', strtotime('2011-11-12')),
  'end_value' => date('Y-m-d', strtotime('2011-11-12'))
],

enter image description here

1
Jason Glisson