How to manage contextual filters for a simple date-based view
Here is the one approach,


First create a custom call back for /events
Remove the date contextual filters from your view
Add only one filter(not contextual filter) to your view for that date field, accept the default values and save the view
Then use the following code in your custom callback to execute the view

function get_events($year = '', $month = '', $day = '')
{
  // Display ID of the view.
  $display_id = 'default';
  // get the view object.
  $view = views_get_view('events_views'); //Replace with your view name
  $filter = $view-&gt;get_item($display_id, 'filter', 'field_event_date_value');
  if ($year) {
    $filter['value']['value'] = $year;
    $filter['granularity'] = 'year';
  }
  if ($year &amp;&amp; $month) {
    $filter['value']['value'] = $year . '-' . $month;
    $filter['granularity'] = 'month';
  }
  if ($year &amp;&amp; $month &amp;&amp; $day) {
    $filter['value']['value'] = $year . '-' . $month . '-' . $day;
    $filter['granularity'] = 'day';
  }
  $view-&gt;set_item($display_id, 'filter', 'field_event_date_value', $filter);
  // If you have any other arguments read from the URL and pass it here as part of args array
  $result = $view-&gt;execute_display($display_id, $args);
}


Hope you are aware of how to pass arguments to the view programatically. This is what we are using for complex date filters in views which lacks lot of support for date functionality, however we haven't tried with granularity. This is un tested and not optimized. Modify it according to your need.