Establecer un campo de fecha a través de right_metadata_wrapper

8

Estoy tratando de establecer un campo de datetipo mediante el uso de, entity_metadata_wrapperpero aunque el campo se crea como fecha y hora en mysql, y al crear un nodo lo establece con el formato esperado AAA-MM-DD HH: MM: SS, cuando se usa entity_metadata_wrapperfalla. Lo único que he logrado insertar son las marcas de tiempo, he probado tanto el formato de fecha Iso como el estándar.

Aquí está la línea que estoy tratando de usar para actualizar:

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

¡Gracias!

Stefgosselin
fuente

Respuestas:

5

Sé que esta pregunta se hizo hace algún tiempo, pero para aquellos que se encuentran con esta pregunta, la respuesta parece darse en http://drupal.org/node/1803286 . No hay devolución de llamada de establecedor para los campos de fecha en la API de entidad, por lo que no puede establecer valores de fecha utilizando entity_metadata_wrapper. El nodo do al que se hace referencia en esta respuesta ofrece una solución alternativa.

Jacobson
fuente
¡Buena atrapada! -> Marcado como favorito para la próxima vez que tenga que jugar con campos de fecha. Gracias amigo.
stefgosselin
8

Pude hacer que esto funcione de una manera indirecta. Es posible que haya podido lograr lo mismo time(), pero esto me pareció mejor, ya que podría seguir exactamente lo que estaba haciendo si alguna vez volviera al código en el futuro.

// 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());
anniegreens
fuente
5

Si el campo no recopila la fecha de finalización, configúrela con la marca de tiempo:

$entity_wrapper->field_date = 1431670535;

Si lo hace:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
fuente
Esto es más útil para mostrar cómo establecer fechas sin fecha de finalización.
reedbert
3

Los ejemplos publicados no funcionaron para mí. Tenía una configuración de campo de fecha en la entidad de usuario, con solo una fecha de inicio y sin hora. El widget no debería importar, pero solo estaba usando el campo de texto predeterminado.

Finalmente lo hice funcionar usando el contenedor de metadatos de la entidad y solo necesitaba usar -> set (time ()). El siguiente código muestra la configuración de un campo "booleano" de casilla de verificación, un campo de referencia del producto y el campo de fecha.

$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();
Blaine Lang
fuente
2

Parece que cómo se establece el valor depende del tipo de campo de fecha que sea. Esto funcionó para mí cuando usaba un Datetipo de campo, que tenía una fecha de inicio y finalización.

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

Usando un ejemplo diferente, esto funcionó para mí con un Datecampo, valor ilimitado, solo hora de inicio:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
fuente
1
¿No quieres decir valuey value2?
artfulrobot