Index: src/bp-activity/bp-activity-classes.php
===================================================================
--- src/bp-activity/bp-activity-classes.php
+++ src/bp-activity/bp-activity-classes.php
@@ -257,6 +257,9 @@
 	 *                     Default: false.
 	 *     @type array $meta_query An array of meta_query conditions.
 	 *                             See WP_Meta_Query::queries for description.
+	 *     @type array $date_query An array of date_query conditions.
+	 *                             See first parameter of WP_Date_Query::__construct()
+	 *                             for description.
 	 *     @type array $filter See BP_Activity_Activity::get_filter_sql().
 	 *     @type string $search_terms Limit results by a search term.
 	 *                                Default: false.
@@ -308,6 +311,7 @@
 			'exclude'           => false,      // Array of ids to exclude
 			'in'                => false,      // Array of ids to limit query by (IN)
 			'meta_query'        => false,      // Filter by activitymeta
+			'date_query'        => false,      // Filter by date
 			'filter'            => false,      // See self::get_filter_sql()
 			'search_terms'      => false,      // Terms to search by
 			'display_comments'  => false,      // Whether to include activity comments
@@ -376,6 +380,13 @@
 			$where_conditions[] = $meta_query_sql['where'];
 		}
 
+		// Process date_query into SQL
+		$date_query_sql = self::get_date_query_sql( $date_query );
+
+		if ( ! empty( $date_query_sql ) ) {
+			$where_conditions['date'] = $date_query_sql;
+		}
+
 		// Alter the query based on whether we want to show activity item
 		// comments in the stream like normal comments or threaded below
 		// the activity.
@@ -685,6 +696,33 @@
 	}
 
 	/**
+	 * Get the SQL for the 'date_query' param in BP_Activity_Activity::get().
+	 *
+	 * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
+	 * of parsing the date_query array and creating the necessary SQL clauses.
+	 * However, since BP_Activity_Activity::get() builds its SQL differently than
+	 * WP_Query, we have to alter the return value (stripping the leading AND
+	 * keyword from the query).
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param array $date_query An array of date_query parameters. See the
+	 *        documentation for the first parameter of WP_Date_Query.
+	 * @return string
+	 */
+	public static function get_date_query_sql( $date_query = array() ) {
+		$sql = '';
+
+		// Date query
+		if ( ! empty( $date_query ) && is_array( $date_query ) && class_exists( 'BP_Date_Query' ) ) {
+			$date_query = new BP_Date_Query( $date_query, 'date_recorded' );
+			$sql = preg_replace( '/^\sAND/', '', $date_query->get_sql() );
+		}
+
+		return $sql;
+	}
+
+	/**
 	 * In BuddyPress 1.2.x, this was used to retrieve specific activity stream items (for example, on an activity's permalink page).
 	 *
 	 * As of 1.5.x, use BP_Activity_Activity::get() with an 'in' parameter instead.
Index: src/bp-activity/bp-activity-functions.php
===================================================================
--- src/bp-activity/bp-activity-functions.php
+++ src/bp-activity/bp-activity-functions.php
@@ -1019,6 +1019,7 @@
 
 		'search_terms'      => false,        // Pass search terms as a string
 		'meta_query'        => false,        // Filter by activity meta. See WP_Meta_Query for format
+		'date_query'        => false,        // Filter by date. See first parameter of WP_Date_Query for format
 		'show_hidden'       => false,        // Show activity items that are hidden site-wide?
 		'exclude'           => false,        // Comma-separated list of activity IDs to exclude
 		'in'                => false,        // Comma-separated list or array of activity IDs to which you want to limit the query
@@ -1040,7 +1041,7 @@
 	) );
 
 	// Attempt to return a cached copy of the first page of sitewide activity.
-	if ( ( 1 === (int) $r['page'] ) && empty( $r['max'] ) && empty( $r['search_terms'] ) && empty( $r['meta_query'] ) && empty( $r['filter'] ) && empty( $r['exclude'] ) && empty( $r['in'] ) && ( 'DESC' === $r['sort'] ) && empty( $r['exclude'] ) && ( 'ham_only' === $r['spam'] ) ) {
+	if ( ( 1 === (int) $r['page'] ) && empty( $r['max'] ) && empty( $r['search_terms'] ) && empty( $r['meta_query'] ) && empty( $r['date_query'] ) && empty( $r['filter'] ) && empty( $r['exclude'] ) && empty( $r['in'] ) && ( 'DESC' === $r['sort'] ) && empty( $r['exclude'] ) && ( 'ham_only' === $r['spam'] ) ) {
 
 		$activity = wp_cache_get( 'bp_activity_sitewide_front', 'bp' );
 		if ( false === $activity ) {
@@ -1052,6 +1053,7 @@
 				'sort'              => $r['sort'],
 				'search_terms'      => $r['search_terms'],
 				'meta_query'        => $r['meta_query'],
+				'date_query'        => $r['date_query'],
 				'filter'            => $r['filter'],
 				'display_comments'  => $r['display_comments'],
 				'show_hidden'       => $r['show_hidden'],
@@ -1071,6 +1073,7 @@
 			'sort'             => $r['sort'],
 			'search_terms'     => $r['search_terms'],
 			'meta_query'       => $r['meta_query'],
+			'date_query'       => $r['date_query'],
 			'filter'           => $r['filter'],
 			'display_comments' => $r['display_comments'],
 			'show_hidden'      => $r['show_hidden'],
Index: src/bp-activity/bp-activity-template.php
===================================================================
--- src/bp-activity/bp-activity-template.php
+++ src/bp-activity/bp-activity-template.php
@@ -178,6 +178,7 @@
 			'filter'            => false,
 			'search_terms'      => false,
 			'meta_query'        => false,
+			'date_query'        => false,
 			'display_comments'  => 'threaded',
 			'show_hidden'       => false,
 			'spam'              => 'ham_only',
@@ -220,6 +221,7 @@
 				'sort'              => $sort,
 				'search_terms'      => $search_terms,
 				'meta_query'        => $meta_query,
+				'date_query'        => $date_query,
 				'filter'            => $filter,
 				'show_hidden'       => $show_hidden,
 				'exclude'           => $exclude,
@@ -567,6 +569,7 @@
 		'since'             => false,        // return only items recorded since this Y-m-d H:i:s date
 
 		'meta_query'        => false,        // filter on activity meta. See WP_Meta_Query for format
+		'date_query'        => false,        // filter by date. See first parameter of WP_Date_Query for format
 
 		// Searching
 		'search_terms'      => false,        // specify terms to search on
@@ -680,6 +683,7 @@
 		'filter'            => $filter,
 		'search_terms'      => $search_terms,
 		'meta_query'        => $meta_query,
+		'date_query'        => $date_query,
 		'display_comments'  => $display_comments,
 		'show_hidden'       => $show_hidden,
 		'spam'              => $spam,
Index: src/bp-core/bp-core-classes.php
===================================================================
--- src/bp-core/bp-core-classes.php
+++ src/bp-core/bp-core-classes.php
@@ -1507,6 +1507,60 @@
 	}
 }
 
+if ( class_exists( 'WP_Date_Query' ) ) :
+/**
+ * BuddyPress date query class.
+ *
+ * Extends the {@link WP_Date_Query} class for use with BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $date_query {
+ *     Date query arguments.  See first parameter of {@link WP_Date_Query::__construct}.
+ * }
+ * @param string $column The DB column to query against.
+ */
+class BP_Date_Query extends WP_Date_Query {
+	/**
+	 * The column to query against. Can be changed via the query arguments.
+	 *
+	 * @var string
+	 */
+	public $column;
+
+	/**
+	 * Constructor.
+	 *
+	 * @see WP_Date_Query::__construct()
+	 */
+	public function __construct( $date_query, $column = '' ) {
+		if ( ! empty( $column ) ) {
+			$this->column = $column;
+			add_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) );
+		}
+
+		parent::__construct( $date_query, $column );
+	}
+
+	/**
+	 * Destructor.
+	 */
+	public function __destruct() {
+		remove_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) );	
+	}
+
+	/**
+	 * Registers our date column with WP Date Query to pass validation.
+	 *
+	 * @param array $retval Current DB columns
+	 * @return array
+	 */
+	public function register_date_column( $retval = array() ) {
+		$retval[] = $this->column;
+		return $retval;
+	}
+}
+endif;
 
 /**
  * BP_Core_Notification is deprecated.
Index: tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
===================================================================
--- tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
+++ tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
@@ -145,6 +145,58 @@
 
 	/**
 	 * @group get
+	 * @group date_query
+	 */
+	public function test_get_with_date_query() {
+		if ( ! class_exists( 'WP_Date_Query' ) ) {
+			return;
+		}
+
+		$a1 = $this->factory->activity->create();
+		$a2 = $this->factory->activity->create( array(
+			'recorded_time' => '2001-01-01 12:00'
+		) );
+		$a3 = $this->factory->activity->create( array(
+			'recorded_time' => '2005-01-01 12:00'
+		) );
+
+		// 'date_query' before test
+		$query = BP_Activity_Activity::get( array(
+			'date_query' => array( array(
+				'before' => array(
+					'year'  => 2004,
+					'month' => 1,
+					'day'   => 1,
+				),
+			) )
+		) );
+		$this->assertEquals( array( $a2 ), wp_list_pluck( $query['activities'], 'id' ) );
+
+		// 'date_query' range test
+		$query = BP_Activity_Activity::get( array(
+			'date_query' => array( array(
+				'after'  => 'January 2nd, 2001',
+				'before' => array(
+					'year'  => 2013,
+					'month' => 1,
+					'day'   => 1,
+				),
+				'inclusive' => true,
+			) )
+		) );
+		$this->assertEquals( array( $a3 ), wp_list_pluck( $query['activities'], 'id' ) );
+
+		// 'date_query' after and relative test
+		$query = BP_Activity_Activity::get( array(
+			'date_query' => array( array(
+				'after' => '1 day ago'
+			) )
+		) );
+		$this->assertEquals( array( $a1 ), wp_list_pluck( $query['activities'], 'id' ) );
+	}
+
+	/**
+	 * @group get
 	 */
 	public function test_get_with_search_terms() {
 		$a1 = $this->factory->activity->create( array(
Index: tests/phpunit/testcases/activity/template.php
===================================================================
--- tests/phpunit/testcases/activity/template.php
+++ tests/phpunit/testcases/activity/template.php
@@ -512,4 +512,33 @@
 			$activities_template = null;
 		}
 	}
+
+	/**
+	 * Integration test for 'date_query' param
+	 *
+	 * @group date_query
+	 */
+	function test_bp_has_activities_with_date_query() {
+		if ( ! class_exists( 'WP_Date_Query' ) ) {
+			return;
+		}
+
+		$a1 = $this->factory->activity->create();
+		$a2 = $this->factory->activity->create( array(
+			'recorded_time' => '2001-01-01 12:00'
+		) );
+		$a3 = $this->factory->activity->create( array(
+			'recorded_time' => '2005-01-01 12:00'
+		) );
+
+		global $activities_template;
+		bp_has_activities( array(
+			'date_query' => array( array(
+				'after' => '1 day ago'
+			) )
+		) );
+
+		$ids = wp_list_pluck( $activities_template->activities, 'id' );
+		$this->assertEquals( $ids, array( $a1 ) );
+	}
 }
