diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php
index 04c2b075a3a49e4dc010776ea911e35f452dced9..31658b44f1a397ac36b69f09d57b1db769edcd40 100644
--- a/app/controllers/admin/courses.php
+++ b/app/controllers/admin/courses.php
@@ -643,7 +643,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 3b7a29cfe05e9a8642c021a00896a7a19f49024b..a0f928c370fd6f5cb457d046c04023bade05ad36 100644
--- a/resources/vue/components/AdminCourses.vue
+++ b/resources/vue/components/AdminCourses.vue
@@ -246,18 +246,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