From 8efaf109b5cf308ffb8eff101ba97d3a756f302a Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Thu, 7 May 2026 17:36:55 +0800 Subject: [PATCH] fix(markdown): include time in datetime export --- deps/cli/src/logseq/cli/common/file.cljs | 37 +++++++++++-------- .../handler/export_property_test.cljs | 16 ++++---- .../frontend/worker/markdown_mirror_test.cljs | 17 +++++++-- 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/deps/cli/src/logseq/cli/common/file.cljs b/deps/cli/src/logseq/cli/common/file.cljs index 4b3d5690c6..44809403af 100644 --- a/deps/cli/src/logseq/cli/common/file.cljs +++ b/deps/cli/src/logseq/cli/common/file.cljs @@ -1,6 +1,8 @@ (ns logseq.cli.common.file "Convert blocks to file content. Used for frontend exports and CLI" - (:require [clojure.string :as string] + (:require [cljs-time.coerce :as tc] + [cljs-time.core :as t] + [clojure.string :as string] [datascript.core :as d] [datascript.impl.entity :as de] [logseq.common.util.date-time :as date-time-util] @@ -16,23 +18,26 @@ (let [lines (string/split-lines content)] (string/join (str "\n" spaces-tabs) lines))) -(defn- datetime-journal-title +(defn- journal-day-title + [journal-day context] + (date-time-util/int->journal-title + journal-day + (or (:date-formatter context) + date-time-util/default-journal-title-formatter))) + +(defn- datetime-value->string [v context] (when (integer? v) - (let [journal-day (cond - (<= 10000101 v 99991231) - v + (cond + (<= 10000101 v 99991231) + (journal-day-title v context) - (>= v 100000000000) - (date-time-util/ms->journal-day v) - - :else - nil)] - (when journal-day - (date-time-util/int->journal-title - journal-day - (or (:date-formatter context) - date-time-util/default-journal-title-formatter)))))) + (>= v 100000000000) + (date-time-util/format + (t/to-default-time-zone (tc/from-long v)) + (str (or (:date-formatter context) + date-time-util/default-journal-title-formatter) + " HH:mm"))))) (defn- property-value->string [db property v context] @@ -80,7 +85,7 @@ (and (= :datetime (:logseq.property/type property)) (integer? v)) - (or (datetime-journal-title v context) + (or (datetime-value->string v context) (str v)) (some? v) diff --git a/src/test/frontend/handler/export_property_test.cljs b/src/test/frontend/handler/export_property_test.cljs index f9852c05fd..c45965b15c 100644 --- a/src/test/frontend/handler/export_property_test.cljs +++ b/src/test/frontend/handler/export_property_test.cljs @@ -1,15 +1,17 @@ (ns frontend.handler.export-property-test - (:require [cljs.test :refer [deftest is]] + (:require [cljs-time.coerce :as tc] + [cljs-time.core :as t] + [cljs.test :refer [deftest is]] [datascript.core :as d] [logseq.cli.common.file :as common-file] [logseq.common.util.date-time :as date-time-util] [logseq.db.frontend.property :as db-property])) -(deftest block-properties-content-uses-property-title-and-journal-title-for-datetime - (let [datetime-ms 1776441600000 - expected-journal-title (date-time-util/int->journal-title - (date-time-util/ms->journal-day datetime-ms) - date-time-util/default-journal-title-formatter) +(deftest block-properties-content-uses-property-title-and-time-for-datetime + (let [datetime-ms (tc/to-long (t/date-time 2026 5 14 9 30)) + expected-datetime (date-time-util/format + (t/to-default-time-zone (tc/from-long datetime-ms)) + "MMM do, yyyy HH:mm") properties (array-map :logseq.property/deadline datetime-ms :user.property/P1-MoCeM8Tf "hello")] @@ -24,6 +26,6 @@ :block/title "P1" :logseq.property/type :default} nil))] - (is (= (str " deadline:: " expected-journal-title "\n" + (is (= (str " deadline:: " expected-datetime "\n" " P1:: hello") (@#'common-file/block-properties-content nil {} " " {})))))) diff --git a/src/test/frontend/worker/markdown_mirror_test.cljs b/src/test/frontend/worker/markdown_mirror_test.cljs index 7f57294caf..2df4f18d9e 100644 --- a/src/test/frontend/worker/markdown_mirror_test.cljs +++ b/src/test/frontend/worker/markdown_mirror_test.cljs @@ -1,10 +1,13 @@ (ns frontend.worker.markdown-mirror-test - (:require [clojure.string :as string] + (:require [cljs-time.coerce :as tc] + [cljs-time.core :as t] + [clojure.string :as string] [cljs.test :refer [async deftest is testing]] [datascript.core :as d] [frontend.worker.db-listener :as db-listener] [frontend.worker.markdown-mirror :as markdown-mirror] [frontend.worker.platform :as worker-platform] + [logseq.common.util.date-time :as date-time-util] [logseq.db :as ldb] [logseq.db.test.helper :as db-test] [promesa.core :as p])) @@ -432,9 +435,15 @@ (let [{:keys [platform files]} (fake-platform) page-uuid #uuid "22222222-2222-4222-8222-222222222221" block-uuid #uuid "22222222-2222-4222-8222-222222222222" + datetime-ms (tc/to-long (t/date-time 2026 5 14 9 30)) + expected-datetime (date-time-util/format + (t/to-default-time-zone (tc/from-long datetime-ms)) + "MMM do, yyyy HH:mm") conn (db-test/create-conn-with-blocks {:properties {:user.property/reproducible-steps {:logseq.property/type :default} - :user.property/rating {:logseq.property/type :number}} + :user.property/rating {:logseq.property/type :number} + :user.property/date-time {:block/title "DateTime" + :logseq.property/type :datetime}} :pages-and-blocks [{:page {:block/title "Issue" :block/uuid page-uuid :build/properties {:user.property/reproducible-steps "Open settings" @@ -444,6 +453,7 @@ :build/properties {:logseq.property/status :logseq.property/status.todo :user.property/reproducible-steps "Click mirror" :user.property/rating 5 + :user.property/date-time datetime-ms :logseq.property/heading 2}}]}]}) page (db-test/find-page-by-title @conn "Issue")] (-> (markdown-mirror/