投稿のタイムスタンプに秒を表示するには?

共有ポップアップに投稿された時刻を秒単位まで表示する最も簡単な方法は何でしょうか?この件について色々調べましたが、何も見つかりませんでした。

各投稿には、HTML内に正確なタイムスタンプがすでに存在するため、この情報は確かに存在しますが、このテキスト(残念ながら、フォーマットされた日付ではなく、ハードコーディングされているようです)を更新して秒を追加する最善の方法が何であるか、私は100%確信が持てません。私は主にCSSに慣れており、JavaScriptにはそれほど詳しくありません(読むことは理解できますが、どのように始めるべきかまではよく知りません。私のコーディング経験のほとんどは組み込みシステムです)。そのため、テーマや同様の軽量アドオンに簡単に追加できるものの中で、どこからアプローチすればよいのか、本当に苦労しています。

こんにちは :wave:

これは以下のフォーマットを使用しています。


/admin/customize/site_texts で変更できます。

これらの2つの文字列を検索してください。

dates.long_date_with_year
dates.long_date_without_year


dates.long_date_with_year

デフォルト
MMM D, YYYY LT

次のように変更します。
MMM D, YYYY LTS


dates.long_date_without_year

デフォルト
MMM D, LT

次のように変更します。
MMM D, LTS


:warning: 注意: この日付フォーマットが使用されているサイトのすべての場所が変更されます。

「いいね!」 9

Donさんの回答を補足すると、この共有トピックモーダルのみで実行したい場合は、このコンポーネントを試すことができます。

設定:

結果:

:+1:

「いいね!」 6

これは素晴らしいですね

しかし

インストールしようとすると、500 Internal Server Error が発生します

作者様として、これを解決するために何を調べればよいか、何かヒントはありますでしょうか?

私の推測では、Discourse の1年前の安定版を使用しているため、おそらくあなたが加えた変更がそれに適合しない(少なくとも、ライブビルドでは動作するはずです)ということだと思います。もし、あなたの方がこれらすべてに詳しくないのであれば、私が自分でリポジトリをフォークしてバックポートするのではなく、どのような違いがあるのか、おおよそ正しい方向性を示していただければ、喜んで作業させていただきます。

確認したところ、API の動作が異なるようです。

元のコードは以下のとおりです。

import { apiInitializer } from "discourse/lib/api";
import discourseComputed from "discourse-common/utils/decorators";

function longDateNoYearWithSeconds(dt) {
  if (!dt) {
    return;
  }

  if (new Date().getFullYear() !== dt.getFullYear()) {
    return moment(dt).format(settings.share_topic_date_with_year_format);
  } else {
    return moment(dt).format(settings.share_topic_date_without_year_format);
  }
}

export default apiInitializer("1.8.0", (api) => {
  api.modifyClass("component:modal/share-topic", {
    pluginId: "share-topic",
    @discourseComputed("post.created_at", "post.wiki", "post.last_wiki_edit")
    displayDate(createdAt, wiki, lastWikiEdit) {
      const date = wiki && lastWikiEdit ? lastWikiEdit : createdAt;
      return longDateNoYearWithSeconds(new Date(date));
    },
  });
});

これを以下のように更新しました。

import { withPluginApi } from "discourse/lib/plugin-api";
import discourseComputed, { on } from "discourse-common/utils/decorators";

function longDateNoYearWithSeconds(dt) {
  if (!dt) {
    return;
  }

  if (new Date().getFullYear() !== dt.getFullYear()) {
    return moment(dt).format(settings.share_topic_date_with_year_format);
  } else {
    return moment(dt).format(settings.share_topic_date_without_year_format);
  }
}

export default {
  name: "post-timestamp-mod",
  initialize(container) {
    withPluginApi("0.10.0", (api) => {
      api.modifyClass("component:modal/share-topic", {
        pluginId: "share-topic",
        @discourseComputed("post.created_at", "post.wiki", "post.last_wiki_edit")
        displayDate(createdAt, wiki, lastWikiEdit) {
          const date = wiki && lastWikiEdit ? lastWikiEdit : createdAt;
          return longDateNoYearWithSeconds(new Date(date));
        },
      });
    });
  }
}

これは、他のテーマコンポーネントで見られるものに基づいています。

まだ機能していませんが、いつか解決できるかもしれません。この API の仕組みを理解するには、どこを見ればよいでしょうか?