日付ピッカー使用時の時刻が間違っています:バグ?

こんにちは、

Discourse(2.6.0.beta4)を Europe/Paris をデフォルトのタイムゾーンとして設定しているのですが、時刻を選択すると表示される時刻が正しくありません。スクリーンショットをご覧ください。

「20:00:00」と入力しても、表示される時刻は「今日 22:00」となってしまいます。ブラウザで実行した moment.tz.guess() は「Europe/Paris」を返すため、何が間違っているのか見当が付きません。

ご教示いただけますでしょうか?

ありがとうございます。

「いいね!」 3

@j.jaffeux これの原因として考えられることはありますか?

「いいね!」 2

フランス語の引用符(おそらく BB コードだったと思います)の扱いが不適切だと考えられます。この問題はドイツ語版では既に解決されています。

https://meta.discourse.org/t/locale-date-timezone-cooking-error-with-french-localization/161532

「いいね!」 3

tzの引用符を除去しました。長期的な解決策ではありませんが……これで動きます😁

「いいね!」 2

はい、申し訳ありません。月曜・火曜は不在でした。ローカルでは再現できませんが、同じケースだと思います。

私は以下の修正を採用しました:

技術的には、これはローカル日付のバグというより、テキスト/Markdownの表示に関するバグです。より包括的な解決策が必要かもしれません。ただし、この問題に関する苦情はローカル日付の文脈でのみ受け取っています。おそらく、その部分の使用頻度が高く、手動編集されやすいことが原因だと思われます。

「いいね!」 4

動いていないようです。discourse-local-dates.js.es6 の 99 行目の条件について、何か問題があるかもしれません。

if (config.timezone && moment.tz.names().includes(config.timezone))

この条件が真にならない(本来は真になるべき)ようです。

編集
修正が別のブランチにコミットされていたことに気づきました。すぐ戻ります :sweat_smile:
…いや、確認しました。

[date=2020-12-20 time=15:00:00 timezone=„Europe/Paris“]
[date=2020-12-20 time=15:00:00 timezone=Europe/Paris]
[date=2020-12-20 time=15:00:00 timezone="Europe/Paris"]
[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]

は、それぞれ正解、正解、誤り、誤りです。

「いいね!」 1

また、私のフランス語 AZERTY キーボードでは、クォートは実際には " です。«» をコピー/ペーストなしで作る方法さえわかりません。それは多分普通のことでしょう :thinking:

私は明らかに「誤り」を非難しているわけではありません:

そして、ここが重要な点ですが、これらの引用は実際にはあなたが自分で書いているのではなく、何らかの変換が行われているのです。

「いいね!」 1

奇妙ですね、最後の2つは16:00になっています。

問題が再現できるようですので、以下の箇所にログを追加してみてください:https://github.com/discourse/discourse/blob/master/plugins/discourse-local-dates/assets/javascripts/lib/discourse-markdown/discourse-local-dates.js.es6#L15

console.log(matches[1]);

そして、表示される結果をそのまま教えてください。

「いいね!」 1

もちろんですよ!でも、そのあたりでついていけなくなっちゃいました :smile: Rails のログが欲しいってことですか?私は専門家じゃなくて、ただちょっと熱心なだけなんです!
それに、ごめんなさい。5 を 6 と読み違えたか、あるいはよくわからないけど、3 番目だけが動かないんですよね。私のミスです。4 番目はプレビューでは動かないけど、投稿後の本文では正しく動いています :crazy_face:

「いいね!」 1

別のプルリクエストをプッシュしました。掘り進める前に、これを待ってみてはいかがでしょうか。

「いいね!」 2

確認できたのは、何か問題が起きた際に「data-timezone」属性が欠落していることです。

メッセージ

  Post Update (1.1ms)  UPDATE "posts" SET "raw" = '[date=2020-12-20 time=12:00:00 timezone=Europe/Paris]
[date=2020-12-20 time=12:00:00 timezone="Europe/Paris"]', "self_edits" = 3, "cooked" = '<p><span data-date="2020-12-20" data-time="12:00:00" class="discourse-local-date" data-timezone="Europe/Paris" data-email-preview="2020-12-20T11:00:00Z UTC">2020-12-20T11:00:00Z</span><br>
<span data-date="2020-12-20" data-time="12:00:00" class="discourse-local-date" data-email-preview="2020-12-20T12:00:00Z UTC">2020-12-20T12:00:00Z</span></p>', "baked_at" = '2020-10-21 15:25:53.050518', "updated_at" = '2020-10-21 15:25:53.050721' WHERE "posts"."id" = 1954
「いいね!」 1

はい、変換された引用符を理解していないためです。そのため、既知の状態に強制しようとしています。

「いいね!」 2

お尋ねして申し訳ありません。その後は作業を進めてください。&laquo;;&& moment.tz.names().includes(config.timezone) の失敗の原因だと認識していました。config.timezone は HTML エスケープされている可能性がありますか?

「いいね!」 1

気にしないでください、私が間違っている可能性もあります :smiley:

つまり、あなたが尋ねていることは基本的に私が行っていることですが、あなたが期待するタイミングとは異なります。それも多分機能するでしょう。例えば、私の修正以前は、以下のようなものが:

[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]

パースされたマークダウンではこれらの属性として現れていました:

{"date"=>"2020-12-20", "time"=>"15:00:00", "timezone"=>"«Europe/Paris»"}

これで問題が明白になります。

私の修正後は以下のように取得できます:

{"date"=>"2020-12-20", "time"=>"15:00:00", "timezone"=>"Europe/Paris"}

単に以前はクォートのすべてのケースを処理できていなかったと考えています。私が行った 2 つ目のコミットで試されましたか?

「いいね!」 2

はい…

ただし、生データが

[date=2020-12-20 time=15:00:00 timezone=«Europe/Paris»]

ではなく、すでに

[date=2020-12-20 time=15:00:00 timezone="Europe/Paris"]

になっているため、

「その先で何か問題が起きている」
:thinking: と思います。実際、どこで起きているのか分かりません。\&laquo;\&raquo; がどこで導入されているのか不明です。
あ、そうか!作曲プレビューで見えました。
[date=2020-12-15 time=14:00:00 timezone="Europe/Paris"

[date=2020-12-15 time=14:00:00 timezone=« Europe/Paris »
になります。

「いいね!」 1

はい、おそらくフロントエンドとバックエンドの両方に問題があるのでしょう。以前の修正でドイツ語のケースは確実に改善しました。同じ正規表現をフロントエンドにも適用すればいいと思います。再現できたらいいのですが😅

明日対応します。

「いいね!」 5

@Benjamin_D / @j.jaffeux 問題はまだ続いていますか?

「いいね!」 1

そうだと思いますが、少し遅れています。まだ 2.6.0 beta5 です :flushed: ただ、10 月以来、その問題に関するコミットは見ていません。