通过entitity_metadata_wrapper设置日期字段


8

我试图date通过使用来设置类型的字段,entity_metadata_wrapper但是尽管该字段在mysql中创建为datetime,并且创建节点时使用预期的YYY-MM-DD HH:MM:SS格式设置它,但使用entity_metadata_wrapper失败。我唯一要插入的是时间戳,我尝试了Iso日期格式和标准日期格式。

这是我要用来更新的行:

   // sets reminder date in db
   $wrapper->field_event_reminder_date->set($reminder_date->format("Y-m-d H:i:s"));

谢谢!

Answers:


5

我知道这个问题是前一段时间提出的,但是对于那些遇到此问题的人,答案似乎在http://drupal.org/node/1803286上给出。Entity API中没有日期字段的setter回调,因此您无法使用entity_metadata_wrapper设置日期值。此答案中引用的do节点提供了一种解决方法。


好赶上!->已标记为下次我必须使用日期字段。谢谢你,朋友。
stefgosselin

8

我能够使它以回旋的方式工作。我也许可以用来完成相同的事情time(),但这对我来说更好看,因为如果将来我回到代码中,我可以完全按照我在做什么。

// Update the Acceptance Date of Current Agreement.
$acceptance_date = new DateTime(date('Y-m-d 00:00:00'));
$company_wrapper->field_acceptance_date->set($acceptance_date->getTimestamp());

5

如果该字段未收集结束日期,请设置时间戳记:

$entity_wrapper->field_date = 1431670535;

如果是这样:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);

这对于显示如何设置无结束日期的日期最有用。
reedbert '16

3

发布的示例对我不起作用。我在用户实体上设置了日期字段,只有开始日期,没有时间。小部件无关紧要,而只是使用默认的文本字段。

最终使用实体元数据包装器使其工作,并且仅需使用-> set(time())。下面的代码显示了设置复选框“布尔”字段,产品参考字段和日期字段。

$wrapper = entity_metadata_wrapper('user', $account);
$wrapper->field_subscription_active = 1;
$wrapper->field_subscriptionplan->set($line_item->commerce_product[LANGUAGE_NONE][0]['product_id']);
$wrapper->field_subscription_signup_date->set(time());
$wrapper->save();

2

似乎如何设置该值取决于它是什么类型的日期字段。当使用Date具有开始和结束日期的字段类型时,这对我有用。

$product->field_course_event_date->set(array(
  'value' => "2013-12-09 00:00:00",
  'value2' => "2013-12-10 00:00:00",
));

使用另一个示例,这对我来说适用于Date字段,无限制值,仅开始时间的情况:

$invitation->field_dates = array(1431670535);

1
难道你的意思是valuevalue2
artfulrobot 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.