diff --git a/date_views/includes/date_views_plugin_pager.inc b/date_views/includes/date_views_plugin_pager.inc index 1addd20..99f89b3 100644 --- a/date_views/includes/date_views_plugin_pager.inc +++ b/date_views/includes/date_views_plugin_pager.inc @@ -279,10 +279,28 @@ class date_views_plugin_pager extends views_plugin_pager { $this->view->date_info->next_date = $nextdate ? new DateObject($nextdate, NULL, $format) : NULL; } else { + $granularity = trim(drupal_strtolower($argument->date_handler->granularity)); + + $map = array( + 'prev-default' => '-1 ' . $granularity, + 'prev' => array( + // List of exception patterns for relative dates generation. + 'month' => 'first day of previous month', + ), + 'next-default' => '+1 ' . $granularity, + 'next' => array( + // List of exception patterns for relative dates generation. + 'month' => 'last day of next month', + ), + ); + $this->view->date_info->prev_date = clone($argument->min_date); - date_modify($this->view->date_info->prev_date, '-1 ' . $argument->date_handler->granularity); - $this->view->date_info->next_date = clone($argument->min_date); - date_modify($this->view->date_info->next_date, '+1 ' . $argument->date_handler->granularity); + $modifier_prev = isset($map['prev'][$granularity]) ? $map['prev'][$granularity] : $map['prev-default']; + date_modify($this->view->date_info->prev_date, $modifier_prev); + + $this->view->date_info->next_date = clone($argument->max_date); + $modifier_next = isset($map['next'][$granularity]) ? $map['next'][$granularity] : $map['next-default']; + date_modify($this->view->date_info->next_date, $modifier_next); } // Write the date_info properties that depend on the current value. $this->view->date_info->year = date_format($argument->min_date, 'Y');