Przeglądaj źródła

fix mysql dates

Pouria Ezzati 1 rok temu
rodzic
commit
52f1f4cece
3 zmienionych plików z 7 dodań i 4 usunięć
  1. 0 2
      knexfile.js
  2. 0 1
      server/knex.js
  3. 7 1
      server/utils/utils.js

+ 0 - 2
knexfile.js

@@ -1,13 +1,11 @@
 const env = require("./server/env");
 
 const isSqlite = env.DB_CLIENT === "sqlite3" || env.DB_CLIENT === "better-sqlite3";
-const isMySQL = env.DB_CLIENT === "mysql" || env.DB_CLIENT === "mysql2";
 
 module.exports = {
   client: env.DB_CLIENT,
   connection: {
     ...(isSqlite && { filename: "db/" + env.DB_FILENAME }),
-    ...(isMySQL && { dateStrings: true, timezone: "Z" }),
     host: env.DB_HOST,
     database: env.DB_NAME,
     user: env.DB_USER,

+ 0 - 1
server/knex.js

@@ -10,7 +10,6 @@ const db = knex({
   client: env.DB_CLIENT,
   connection: {
     ...(isSqlite && { filename: "db/" + env.DB_FILENAME }),
-    ...(isMySQL && { dateStrings: true, timezone: "Z" }),
     host: env.DB_HOST,
     port: env.DB_PORT,
     database: env.DB_NAME,

+ 7 - 1
server/utils/utils.js

@@ -1,4 +1,4 @@
-const { differenceInDays, differenceInHours, differenceInMonths, differenceInMilliseconds, addDays, subHours, subDays, subMonths, subYears } = require("date-fns");
+const { differenceInDays, differenceInHours, differenceInMonths, differenceInMilliseconds, addDays, subHours, subDays, subMonths, subYears, format } = require("date-fns");
 const nanoid = require("nanoid/generate");
 const knexUtils = require("./knex");
 const JWT = require("jsonwebtoken");
@@ -131,6 +131,12 @@ function dateToUTC(date) {
 
   // databases other than postgres need the date to be formatted in 'YYYY-MM-DD hh:mm:ss'
   if (!knex.isPostgres) {
+    // mysql doesn't save time in utc, so format the date in local timezone instead
+    if (knex.isMySQL) {
+      return format(new Date(date), "yyyy-MM-dd HH:mm:ss");
+    }
+    // format utc date instead of local date
+    // (this is the same as the format function above, just tiny tiny faster)
     return dateUTC.substring(0, 10) + " " + dateUTC.substring(11, 19);
   };