diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php
index 20133cd67b8b4f85fc219684eb35dec1c48c4e30..be355cf6798ccd8a02f41d125cdc7680eac6bc19 100644
--- a/app/controllers/admin/courses.php
+++ b/app/controllers/admin/courses.php
@@ -636,7 +636,9 @@ class Admin_CoursesController extends AuthenticatedController
             $d['contents'] .= '</ul></div>';
         }
         if (in_array('last_activity', $activated_fields)) {
-            $d['last_activity'] = strftime('%x', lastActivity($course->id));
+            $last_activity = lastActivity($course->id);
+            $d['last_activity'] = strftime('%x', $last_activity);
+            $d['last_activity_raw'] = $last_activity;
         }
 
         foreach (PluginManager::getInstance()->getPlugins('AdminCourseContents') as $plugin) {
diff --git a/resources/vue/components/AdminCourses.vue b/resources/vue/components/AdminCourses.vue
index eb8defcf37c3038e913a2acf164e5fd44136fd98..9c6e28c84b09f9a090db32ddf8a0c7d9f057a265 100644
--- a/resources/vue/components/AdminCourses.vue
+++ b/resources/vue/components/AdminCourses.vue
@@ -233,18 +233,22 @@ export default {
                 return collator.compare(striptags(a[sortby]), striptags(b[sortby]));
             };
 
-            let is_numeric = true;
-            for (let i in array) {
-                if (striptags(array[i][sortby]) && isNaN(striptags(array[i][sortby]))) {
-                    is_numeric = false;
-                    break;
+            if (sortby === 'last_activity') {
+                sortFunction = (a, b) => a.last_activity_raw - b.last_activity_raw;
+            } else {
+                let is_numeric = true;
+                for (let i in array) {
+                    if (striptags(array[i][sortby]) && isNaN(striptags(array[i][sortby]))) {
+                        is_numeric = false;
+                        break;
+                    }
+                }
+                if (is_numeric) {
+                    sortFunction = function (a, b) {
+                        return (striptags(a[sortby]) ? parseInt(striptags(a[sortby]), 10) : 0)
+                            - (striptags(b[sortby]) ? parseInt(striptags(b[sortby]), 10) : 0);
+                    };
                 }
-            }
-            if (is_numeric) {
-                sortFunction = function (a, b) {
-                    return (striptags(a[sortby]) ? parseInt(striptags(a[sortby]), 10) : 0)
-                        - (striptags(b[sortby]) ? parseInt(striptags(b[sortby]), 10) : 0);
-                };
             }
 
             // Actual sort on copy of array