有一个Datetime对象如下,我想得到日期值
Array ( [0] => Array ( [value] => Drupal\Core\Datetime\DrupalDateTime Object ( [formatTranslationCache:protected] => [inputTimeRaw:protected] => [inputTimeAdjusted:protected] => [inputTimeZoneRaw:protected] => [inputTimeZoneAdjusted:protected] => [inputFormatRaw:protected] => [inputFormatAdjusted:protected] => [langcode:protected] => en [errors:protected] => Array ( ) [dateTimeObject:protected] => DateTime Object ( [date] => 2018-01-05 01:30:00.000000 [timezone_type] => 3 [timezone] => UTC ) [stringTranslation:protected] => ) ) )
我不想通过
$node->get("field_id")->value;获得此值 因为我需要动态值,这意味着我应该在更改日期字段后更改值。 有可能吗?
答案 0 :(得分:2)
想出来
$date = $form_state->getValue('field_id')[0]['value']->format('Y-m-d H:i:s')
它返回字符串!!
重点是找到对象。
答案 1 :(得分:0)
数组中的值类型为 Drupal \ Core \ Datetime \ DrupalDateTime ,请检查Drupal.org上的API DrupalDateTime Doc。
为了从对象获取值,您必须使用上面提到的 __ toString 方法。
继续:
$dateTime = YourArray[0]['value'];
$date = $dateTime->_toString();
否则
$date = $dateTime->format('Y-m-d h::i::s');
有关更多日期格式,请查看PHP文档PHP DATE
编辑1: 以下代码正常运行:
$temp = new \Drupal\Core\Datetime\DrupalDateTime();
echo $temp->__toString();
echo $temp->format('Y-m-d h::i'); die;
答案 2 :(得分:0)
我发现在没有支持的浏览器中
<input type="time">
(即Safari)该值不是&#34; Drupal \ Core \ Datetime \ DrupalDateTime&#34;但阵列。
答案 3 :(得分:0)
这是我在drupal 8模块中执行的操作,用于从DrupalDateTime获取格式化日期
I。如果您有日期并想要设置日期格式,只需将其传递给类(DrupalDateTime)的静态方法,如下所示。您可以将字符串替换为日期变量。 下面显示了使用 DrupalDateTime
的静态版本和非静态版本 $date = DrupalDateTime::createFromFormat('j-M-Y', '20-Jul-2019');
// Using the static method prints out: 20-Jul-2019:11:am
$date = new DrupalDateTime('now'); // grab current dateTime using NON static
$date->format('l, F j, Y - H:i'); // format it
// prints out nicely formatted version: Tue, Jul 16, 2019 - 11:34:am
// you can remove H:i and what's after it if you don't want hours or am pm
$date = new DrupalDateTime('now'); // grab current dateTime
// Or print $date->format('d-m-Y: H:i A');
// prints out: 16-07-2019: 11:43 AM
更多示例:
$date = new DrupalDateTime();
$date->setTimezone(new \DateTimeZone('America/Chicago'));
print $date->format('m/d/Y g:i a');
// The above prints current time for given Timezone
// prints : 07/16/2019 10:59 am
// Another variations of the above except it takes specific date and UTC zone
$date = new DrupalDateTime('2019-07-31 11:30:00', 'UTC');
$date->setTimezone(new \DateTimeZone('America/Chicago'));
print $date->format('m/d/Y g:i a');
// prints 07/31/2019 6:30 am
要在模块/代码中使用它们,您需要在文件顶部添加以下内容;
use Drupal\Core\Datetime\DrupalDateTime;
还注意,DrupalDateTime扩展了DateTimePlus()本身,它“用更灵活的初始化参数包装了PHP DateTime类……根据文档...” >
如何使用Drush进行测试。 将以上代码保存在php脚本中,然后在drupal引导后像drush那样运行srcipt:
drush -r /path-to-your-drupal-documentRoot -l example.com scr ~/path-to your-script
对于多站点,请确保使用... drush -l http ....如上
注意: 我发布了类似的答案:https://drupal.stackexchange.com/questions/252333/how-to-get-formatted-date-string-from-a-datetimeitem-object/283529#283529