如何在drupal 8中获取datetime对象的值?

时间:2018-01-16 07:04:07

标签: datetime drupal-8

有一个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;
获得此值 因为我需要动态值,这意味着我应该在更改日期字段后更改值。 有可能吗?

4 个答案:

答案 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