2

I am running the following code, retrieving a list of job openings that will expire in 7 days.

$triggerDate = new DateTime();
$triggerDate->add(new DateInterval("P7D"));

$query = new EntityFieldQuery();
$query->entityCondition('entity_type','node')
  ->entityCondition('bundle','job')
  ->propertyCondition('status',1)
  ->fieldCondition('field_expires','value',$triggerDate->format('Y-m-d'),'=');

This is returning 0 jobs, even though I have several that will expire in 7 days. For example, one of my job nodes, has the following value

[field_expires] => Array
     (
         [und] => Array
             (
                 [0] => Array
                     (
                         [value] => 2013-05-09T00:00:00
                         [timezone] => America/Los_Angeles
                         [timezone_db] => America/Los_Angeles
                         [date_type] => date
                     )

             )

     )

When I leave the filter off altogether, the query succeeds and retrieves all items. I've tried many variations of the date format including Y-m-d\T00:00:00 and Y-m-d 00:00:00.

The field is of type: Date (ISO format). What am I doing wrong?

3
  • Have you tried to see in the database how is stored your field_expires ?
    – tostinni
    Commented May 2, 2013 at 22:23
  • Y-m-d\TH:i:s really should work as far as formats go. Have you tried printing $triggerDate->format('Y-m-d\TH:i:s') just to see what it is passing to the query?
    – rooby
    Commented May 3, 2013 at 10:02
  • @rooby, yes, I have and it's showing me the date I expect to see.
    – Robbert
    Commented May 3, 2013 at 15:50

1 Answer 1

4

This works perfectly fine:

$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type','node')
  ->entityCondition('bundle', 'product_display')
  ->propertyCondition('status', 1)
  ->fieldCondition('field_expires','value', '2013-04-30T14:02Z', '>')
  ->execute();
3
  • Thanks for the response. However,the only problem with this is I need only those nodes from a given date, not all that come after as well, as a greater than operator would do.
    – Robbert
    Commented May 3, 2013 at 15:51
  • 1
    Then maybe try ->fieldCondition('field_expires','value', array('2013-04-30T00:00Z', '2013-04-30T11:59Z'), 'BETWEEN')
    – rooby
    Commented May 5, 2013 at 1:16
  • Maybe that is what your problem is, are you expecting that if you check for midnight it will give you all results on that day? - Because it won't, it will only give you results that are exactly midnight on the given date. You have to do a range to match the whole day.
    – rooby
    Commented May 5, 2013 at 1:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.