Index: src/bp-activity/bp-activity-admin.php
===================================================================
--- src/bp-activity/bp-activity-admin.php
+++ src/bp-activity/bp-activity-admin.php
@@ -666,8 +666,8 @@
 				<div class="misc-pub-section curtime misc-pub-section-last">
 					<?php
 					// translators: Publish box date format, see http://php.net/date
-					$datef = __( 'M j, Y @ G:i', 'buddypress' );
-					$date  = date_i18n( $datef, strtotime( $item->date_recorded ) );
+					$datef = __( 'M j, Y @ G:i \U\T\C', 'buddypress' );
+					$date  = date_i18n( $datef, bp_core_strtotime( $item->date_recorded ) );
 					?>
 					<span id="timestamp"><?php printf( __( 'Submitted on: <strong>%1$s</strong>', 'buddypress' ), $date ); ?></span>&nbsp;<a href="#edit_timestamp" class="edit-timestamp hide-if-no-js" tabindex='4'><?php _e( 'Edit', 'buddypress' ); ?></a>
 
@@ -1427,7 +1427,7 @@
 		$actions = apply_filters( 'bp_activity_admin_comment_row_actions', array_filter( $actions ), $item );
 
 		/* translators: 2: activity admin ui date/time */
-		printf( __( 'Submitted on <a href="%1$s">%2$s at %3$s</a>', 'buddypress' ), bp_activity_get_permalink( $item['id'] ), get_date_from_gmt( $item['date_recorded'], get_option( 'date_format' ) ), get_date_from_gmt( $item['date_recorded'], get_option( 'time_format' ) ) );
+		printf( __( 'Submitted on <a href="%1$s">%2$s</a>', 'buddypress' ), bp_activity_get_permalink( $item['id'] ), bp_format_time( bp_core_strtotime( $item['date_recorded'] ) ) );
 
 		// End timestamp
 		echo '</div>';
Index: src/bp-activity/bp-activity-classes.php
===================================================================
--- src/bp-activity/bp-activity-classes.php
+++ src/bp-activity/bp-activity-classes.php
@@ -1277,7 +1277,7 @@
 		if ( ! empty( $filter_array['since'] ) ) {
 			// Validate that this is a proper Y-m-d H:i:s date
 			// Trick: parse to UNIX date then translate back
-			$translated_date = date( 'Y-m-d H:i:s', strtotime( $filter_array['since'] ) );
+			$translated_date = gmdate( 'Y-m-d H:i:s', bp_core_strtotime( $filter_array['since'] ) );
 			if ( $translated_date === $filter_array['since'] ) {
 				$filter_sql[] = "a.date_recorded > '{$translated_date}'";
 			}
Index: src/bp-activity/bp-activity-filters.php
===================================================================
--- src/bp-activity/bp-activity-filters.php
+++ src/bp-activity/bp-activity-filters.php
@@ -457,7 +457,7 @@
 		return $classes;
 	}
 	
-	$classes .= ' date-recorded-' . strtotime( $activity_date );
+	$classes .= ' date-recorded-' . bp_core_strtotime( $activity_date );
 
 	return $classes;
 }
Index: src/bp-core/bp-core-functions.php
===================================================================
--- src/bp-core/bp-core-functions.php
+++ src/bp-core/bp-core-functions.php
@@ -802,7 +802,7 @@
  *
  * @param int|string $older_date The earlier time from which you're calculating
  *        the time elapsed. Enter either as an integer Unix timestamp, or as a
- *        date string of the format 'Y-m-d h:i:s'.
+ *        GMT date string of the format 'Y-m-d h:i:s'.
  * @param int $newer_date Optional. Unix timestamp of date to compare older
  *        date to. Default: false (current time).
  * @return string String representing the time since the older date, eg
@@ -951,6 +951,36 @@
 	return apply_filters( 'bp_core_time_since', $output, $older_date, $newer_date );
 }
 
+/**
+ * UTC-safe version of strtotime().
+ *
+ * strtotime() is dependent on the server's timezone.  If the server isn't set
+ * to UTC, the UNIX timestamp can be calculated differently and cause
+ * incorrect times to be returned.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param $date The date string to convert to a UNIX timestamp.
+ * @return int
+ */
+function bp_core_strtotime( $date = '' ) {
+	// back up the existing timezone
+	$tz_backup = date_default_timezone_get();
+
+	// override timezone to UTC
+	date_default_timezone_set( 'UTC' );
+
+	// use strtotime() as usual
+	$time = strtotime( $date );
+
+	// revert timezone if needed
+	if ( $tz_backup ) {
+		date_default_timezone_set( $tz_backup );
+	}
+
+	return $time;
+}
+
 /** Messages ******************************************************************/
 
 /**
@@ -1075,17 +1105,17 @@
 	$activity = bp_get_user_last_activity( $user_id );
 
 	if ( !is_numeric( $activity ) )
-		$activity = strtotime( $activity );
+		$activity = bp_core_strtotime( $activity );
 
 	// Get current time
-	$current_time = bp_core_current_time();
+	$current_time = bp_core_current_time( true, 'timestamp' );
 
 	// Use this action to detect the very first activity for a given member
 	if ( empty( $activity ) ) {
 		do_action( 'bp_first_activity_for_member', $user_id );
 	}
 
-	if ( empty( $activity ) || strtotime( $current_time ) >= strtotime( '+5 minutes', $activity ) ) {
+	if ( empty( $activity ) || $current_time >= strtotime( '+5 minutes', $activity ) ) {
 		bp_update_user_last_activity( $user_id, $current_time );
 	}
 }
Index: src/bp-forums/bp-forums-template.php
===================================================================
--- src/bp-forums/bp-forums-template.php
+++ src/bp-forums/bp-forums-template.php
@@ -1189,7 +1189,7 @@
 	function bp_get_the_topic_time_since_created() {
 		global $forum_template;
 
-		return apply_filters( 'bp_get_the_topic_time_since_created', bp_core_time_since( strtotime( $forum_template->topic->topic_start_time ) ) );
+		return apply_filters( 'bp_get_the_topic_time_since_created', bp_core_time_since( $forum_template->topic->topic_start_time ) );
 	}
 
 /**
@@ -1238,7 +1238,7 @@
 	function bp_get_the_topic_time_since_last_post() {
 		global $forum_template;
 
-		return apply_filters( 'bp_get_the_topic_time_since_last_post', bp_core_time_since( strtotime( $forum_template->topic->topic_time ) ) );
+		return apply_filters( 'bp_get_the_topic_time_since_last_post', bp_core_time_since( $forum_template->topic->topic_time ) );
 	}
 
 /**
@@ -2050,7 +2050,7 @@
 	function bp_get_the_topic_post_time_since() {
 		global $topic_template;
 
-		return apply_filters( 'bp_get_the_topic_post_time_since', bp_core_time_since( strtotime( $topic_template->post->post_time ) ) );
+		return apply_filters( 'bp_get_the_topic_post_time_since', bp_core_time_since( $topic_template->post->post_time ) );
 	}
 
 /**
Index: src/bp-friends/bp-friends-classes.php
===================================================================
--- src/bp-friends/bp-friends-classes.php
+++ src/bp-friends/bp-friends-classes.php
@@ -382,7 +382,7 @@
 				return 0;
 			}
 
-			return ( strtotime( $a["date_recorded"] ) < strtotime( $b["date_recorded"] ) ) ? 1 : -1;
+			return ( bp_core_strtotime( $a["date_recorded"] ) < bp_core_strtotime( $b["date_recorded"] ) ) ? 1 : -1;
 		' ) );
 
 		$retval = array();
Index: src/bp-groups/bp-groups-admin.php
===================================================================
--- src/bp-groups/bp-groups-admin.php
+++ src/bp-groups/bp-groups-admin.php
@@ -1479,7 +1479,7 @@
 	 * @param array Information about the current row.
 	 */
 	public function column_last_active( $item = array() ) {
-		$last_active = groups_get_groupmeta( $item['id'], 'last_activity' );
+		$last_active = get_date_from_gmt( groups_get_groupmeta( $item['id'], 'last_activity' ) );
 		echo apply_filters_ref_array( 'bp_groups_admin_get_group_last_active', array( $last_active, $item ) );
 	}
 
Index: src/bp-groups/bp-groups-template.php
===================================================================
--- src/bp-groups/bp-groups-template.php
+++ src/bp-groups/bp-groups-template.php
@@ -733,7 +733,7 @@
 		if ( empty( $group ) )
 			$group =& $groups_template->group;
 
-		return apply_filters( 'bp_get_group_date_created', bp_core_time_since( strtotime( $group->date_created ) ) );
+		return apply_filters( 'bp_get_group_date_created', bp_core_time_since( $group->date_created ) );
 	}
 
 function bp_group_creator_username( $group = false ) {
@@ -1329,7 +1329,7 @@
 
 				<h5><?php echo bp_core_get_userlink( $admin->user_id ) ?></h5>
 				<span class="activity">
-					<?php echo bp_core_get_last_activity( strtotime( $admin->date_modified ), __( 'joined %s', 'buddypress') ); ?>
+					<?php echo bp_core_get_last_activity( bp_core_strtotime( $admin->date_modified ), __( 'joined %s', 'buddypress') ); ?>
 				</span>
 
 				<?php if ( bp_is_active( 'friends' ) ) : ?>
@@ -1394,7 +1394,7 @@
 
 				<h5><?php echo bp_core_get_userlink( $mod->user_id ) ?></h5>
 
-				<span class="activity"><?php echo bp_core_get_last_activity( strtotime( $mod->date_modified ), __( 'joined %s', 'buddypress') ); ?></span>
+				<span class="activity"><?php echo bp_core_get_last_activity( bp_core_strtotime( $mod->date_modified ), __( 'joined %s', 'buddypress') ); ?></span>
 
 				<?php if ( bp_is_active( 'friends' ) ) : ?>
 
@@ -3277,7 +3277,7 @@
 function bp_group_request_time_since_requested() {
 	global $requests_template;
 
-	echo apply_filters( 'bp_group_request_time_since_requested', sprintf( __( 'requested %s', 'buddypress' ), bp_core_time_since( strtotime( $requests_template->request->date_modified ) ) ) );
+	echo apply_filters( 'bp_group_request_time_since_requested', sprintf( __( 'requested %s', 'buddypress' ), bp_core_time_since( $requests_template->request->date_modified ) ) );
 }
 
 function bp_group_request_comment() {
Index: src/bp-members/bp-members-admin.php
===================================================================
--- src/bp-members/bp-members-admin.php
+++ src/bp-members/bp-members-admin.php
@@ -915,8 +915,8 @@
 						<?php
 
 						// translators: Publish box date format, see http://php.net/date
-						$datef = __( 'M j, Y @ G:i', 'buddypress' );
-						$date  = date_i18n( $datef, strtotime( $user->user_registered ) );
+						$datef = __( 'M j, Y @ G:i \U\T\C', 'buddypress' );
+						$date  = date_i18n( $datef, bp_core_strtotime( $user->user_registered ) );
 						?>
 						<span id="timestamp"><?php printf( __( 'Registered on: <strong>%1$s</strong>', 'buddypress' ), $date ); ?></span>
 					</div>
@@ -978,7 +978,7 @@
 		}
 
 		$datef = __( 'M j, Y @ G:i', 'buddypress' );
-		$date  = date_i18n( $datef, strtotime( $last_active ) ); ?>
+		$date  = date_i18n( $datef, bp_core_strtotime( $last_active ) ); ?>
 
 		<ul>
 			<li class="bp-members-profile-stats"><?php printf( __( 'Last active: %1$s', 'buddypress' ), '<strong>' . $date . '</strong>' ); ?></li>
Index: src/bp-members/bp-members-template.php
===================================================================
--- src/bp-members/bp-members-template.php
+++ src/bp-members/bp-members-template.php
@@ -579,7 +579,7 @@
 		global $members_template;
 
 		$classes      = array();
-		$current_time = bp_core_current_time();
+		$current_time = bp_core_current_time( true, 'timestamp' );
 		$pos_in_loop  = (int) $members_template->current_member;
 
 		// If we've only one group in the loop, don't both with odd and even.
@@ -590,7 +590,7 @@
 
 		// Has the user been active recently?
 		if ( ! empty( $members_template->member->last_activity ) ) {
-			if ( strtotime( $current_time ) <= strtotime( '+5 minutes', strtotime( $members_template->member->last_activity ) ) )
+			if ( $current_time <= bp_core_strtotime( '+5 minutes', bp_core_strtotime( $members_template->member->last_activity ) ) )
 				$classes[] = 'is-online';
 		}
 
Index: src/bp-messages/bp-messages-template.php
===================================================================
--- src/bp-messages/bp-messages-template.php
+++ src/bp-messages/bp-messages-template.php
@@ -614,7 +614,7 @@
 	function bp_get_message_thread_last_post_date() {
 		global $messages_template;
 
-		return apply_filters( 'bp_get_message_thread_last_post_date', bp_format_time( strtotime( $messages_template->thread->last_message_date ) ) );
+		return apply_filters( 'bp_get_message_thread_last_post_date', bp_format_time( bp_core_strtotime( $messages_template->thread->last_message_date ) ) );
 	}
 
 /**
@@ -917,7 +917,7 @@
 	 */
 	function bp_get_message_notice_post_date() {
 		global $messages_template;
-		return apply_filters( 'bp_get_message_notice_post_date', bp_format_time( strtotime($messages_template->thread->date_sent) ) );
+		return apply_filters( 'bp_get_message_notice_post_date', bp_format_time( bp_core_strtotime($messages_template->thread->date_sent) ) );
 	}
 
 /**
@@ -1722,7 +1722,7 @@
 	function bp_get_the_thread_message_date_sent() {
 		global $thread_template;
 
-		return apply_filters( 'bp_get_the_thread_message_date_sent', strtotime( $thread_template->message->date_sent ) );
+		return apply_filters( 'bp_get_the_thread_message_date_sent', $thread_template->message->date_sent );
 	}
 
 /**
Index: src/bp-xprofile/bp-xprofile-activity.php
===================================================================
--- src/bp-xprofile/bp-xprofile-activity.php
+++ src/bp-xprofile/bp-xprofile-activity.php
@@ -285,8 +285,8 @@
 	} else {
 		// Default throttle time is 2 hours. Filter to change (in seconds)
 		$throttle_period = apply_filters( 'bp_xprofile_updated_profile_activity_throttle_time', 60 * 60 * 2 );
-		$then = strtotime( $existing['activities'][0]->date_recorded );
-		$now  = strtotime( bp_core_current_time() );
+		$then = bp_core_strtotime( $existing['activities'][0]->date_recorded );
+		$now  = bp_core_current_time( true, 'timestamp' );
 
 		$throttle = ( $now - $then ) < $throttle_period;
 	}
Index: src/bp-xprofile/bp-xprofile-classes.php
===================================================================
--- src/bp-xprofile/bp-xprofile-classes.php
+++ src/bp-xprofile/bp-xprofile-classes.php
@@ -1714,7 +1714,7 @@
 
 		// If Unix timestamp
 		if ( ! is_numeric( $field_value ) ) {
-			$field_value = strtotime( $field_value );
+			$field_value = bp_core_strtotime( $field_value );
 		}
 
 		return bp_format_time( $field_value, true, false );
Index: src/bp-xprofile/bp-xprofile-template.php
===================================================================
--- src/bp-xprofile/bp-xprofile-template.php
+++ src/bp-xprofile/bp-xprofile-template.php
@@ -698,7 +698,7 @@
 		$last_updated = bp_get_user_meta( bp_displayed_user_id(), 'profile_last_updated', true );
 
 		if ( $last_updated )
-			return apply_filters( 'bp_get_profile_last_updated', sprintf( __('Profile updated %s', 'buddypress'), bp_core_time_since( strtotime( $last_updated ) ) ) );
+			return apply_filters( 'bp_get_profile_last_updated', sprintf( __('Profile updated %s', 'buddypress'), bp_core_time_since( bp_core_strtotime( $last_updated ) ) ) );
 
 		return false;
 	}
