diff --git a/package.json b/package.json
index c9b3ab74eda5d62ad01874b1cabde72a6d8b69d9..c8d23773a052a1df1569b320cf0ea9d518178a6a 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
     "lodash": "4.17.21",
     "lodash.debounce": "4.0.8",
     "marked": "0.8.2",
-    "moment": "2.29.4",
+    "luxon": "3.0.1",
     "normalize.css": "7.0.0",
     "nprogress": "0.2.0",
     "numeral": "2.0.6",
diff --git a/src/components/ChatMessage/index.vue b/src/components/ChatMessage/index.vue
index 2e6a05cb78fbe2ee5f25d7d098c537287a970dc5..4ff6dcc3ffb8f2f6bd5a9bb54742819bfc274cbe 100644
--- a/src/components/ChatMessage/index.vue
+++ b/src/components/ChatMessage/index.vue
@@ -51,8 +51,7 @@
 </template>
 
 <script>
-import moment from 'moment'
-
+import { DateTime } from 'luxon'
 export default {
   name: 'ChatMessage',
   props: {
@@ -79,7 +78,7 @@ export default {
       return account[property]
     },
     parseTimestamp(timestamp) {
-      return moment(timestamp).format('YYYY-MM-DD HH:mm')
+      return DateTime.fromISO(timestamp).toFormat('yyyy-MM-dd HH:mm')
     },
     deleteMessage() {
       this.$confirm('Are you sure you want to delete this message?', 'Warning', {
diff --git a/src/components/Status/index.vue b/src/components/Status/index.vue
index f2b071c2bc8c169aa032e189cdef12c18d873d9f..cc6e8d2b8964a5b9567b91bb885220064cbe56b3 100644
--- a/src/components/Status/index.vue
+++ b/src/components/Status/index.vue
@@ -135,8 +135,7 @@
 </template>
 
 <script>
-import moment from 'moment'
-
+import { DateTime } from 'luxon'
 export default {
   name: 'Status',
   props: {
@@ -233,7 +232,7 @@ export default {
       return +(pollOption.votes_count / allVotes * 100).toFixed(1)
     },
     parseTimestamp(timestamp) {
-      return moment(timestamp).format('YYYY-MM-DD HH:mm')
+      return DateTime.fromISO(timestamp).toFormat('yyyy-MM-dd HH:mm')
     },
     propertyExists(account, property, _secondProperty) {
       if (_secondProperty) {
diff --git a/src/views/moderationLog/index.vue b/src/views/moderationLog/index.vue
index 4ff319b2b725419d2910b2333edfe917b8f81859..4e3b6b3ff7c02dfeb7e518f6b31df4e2d12917ff 100644
--- a/src/views/moderationLog/index.vue
+++ b/src/views/moderationLog/index.vue
@@ -61,7 +61,7 @@
 </template>
 
 <script>
-import moment from 'moment'
+import { DateTime } from 'luxon'
 import _ from 'lodash'
 import debounce from 'lodash.debounce'
 import RebootButton from '@/components/RebootButton'
@@ -128,7 +128,7 @@ export default {
       this.$store.dispatch('FetchModerationLog', filters)
     },
     normalizeTimestamp(timestamp) {
-      return moment(timestamp * 1000).format('YYYY-MM-DD HH:mm')
+      return DateTime.fromSeconds(timestamp).toFormat('yyyy-MM-dd HH:mm')
     },
     propertyExists(account, property) {
       return account[property]
diff --git a/src/views/reports/components/NoteCard.vue b/src/views/reports/components/NoteCard.vue
index eff4d6a1b982f6d9220eb32896c825f98d9e31d8..19df3f0dc7164a5147189ec590326363e001dadc 100644
--- a/src/views/reports/components/NoteCard.vue
+++ b/src/views/reports/components/NoteCard.vue
@@ -29,8 +29,7 @@
 </template>
 
 <script>
-import moment from 'moment'
-
+import { DateTime } from 'luxon'
 export default {
   name: 'NoteCard',
   props: {
@@ -63,7 +62,7 @@ export default {
       })
     },
     parseTimestamp(timestamp) {
-      return moment(timestamp).format('YYYY-MM-DD HH:mm')
+      return DateTime.fromISO(timestamp).toFormat('yyyy-MM-dd HH:mm')
     },
     propertyExists(account, property) {
       return account[property]
diff --git a/src/views/reports/components/Report.vue b/src/views/reports/components/Report.vue
index 423aa439f77e01a5e3e4d0e53baf58e126e30703..db6ffe8ee15f6b5071571816de23758587c5e9cf 100644
--- a/src/views/reports/components/Report.vue
+++ b/src/views/reports/components/Report.vue
@@ -50,7 +50,7 @@
 </template>
 
 <script>
-import moment from 'moment'
+import { DateTime } from 'luxon'
 import ModerateUserDropdown from './ModerateUserDropdown'
 import ReportContent from './ReportContent'
 
@@ -98,7 +98,7 @@ export default {
       this.$store.dispatch('FetchReports', page)
     },
     parseTimestamp(timestamp) {
-      return moment(timestamp).format('L HH:mm')
+      return DateTime.fromISO(timestamp).toFormat('yyyy-MM-dd HH:mm')
     },
     propertyExists(account, property, _secondProperty) {
       if (_secondProperty) {
diff --git a/yarn.lock b/yarn.lock
index 23a5c2aa8c3cefe469142ae61ac880167d324cab..ad180f7b984ca500fc9a32e57d8e1cce177e7b82 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6919,6 +6919,11 @@ lru-cache@^5.1.1:
   dependencies:
     yallist "^3.0.2"
 
+luxon@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.0.1.tgz#6901111d10ad06fd267ad4e4128a84bef8a77299"
+  integrity sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw==
+
 make-dir@^1.0.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
@@ -7216,11 +7221,6 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.6, mkdirp@~
   dependencies:
     minimist "^1.2.6"
 
-moment@2.29.4:
-  version "2.29.4"
-  resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
-  integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
-
 move-concurrently@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"