昨日より古い項目には実際の日付を表示すべき
(grumpy.website)- Web UIの相対日付ラベルは人間の言葉のように見えるが、実際にユーザーが日付を思い浮かべる方法とはしばしばズレる
- 人にとって「yesterday」は今日の前日0時〜23時59分であり、単に「24時間未満」ではない
- 実装ごとに基準が変わると、同じサービス内でも「yesterday」の表示が揺らぎ、日付表示の信頼性が下がる
- 「12 days ago」のように、何日前かを数字だけで長く表示する方式は、人が自然に使う時間感覚から離れている
- 「last week/month/year」も範囲が広く曖昧なため、昨日より古い項目は具体的な日付で見せるほうが明確
相対日付ラベルが紛らわしい理由
- 「yesterday」「2 days ago」「a week ago」のような表現は、人間的な時間表現のように見えるが、実際の日付判断には十分に正確ではない
- 特に「yesterday」は、ユーザーが期待する意味が明確
- 今日の前日を意味する
- 前日の0時から23時59分までを指す
- 「24時間未満」という計算式とは異なる
- コンピューターの実装では「yesterday」をそれぞれ異なる方法で計算する可能性があり、同じサービス内でも表示が変わると、ユーザーは日付情報を信頼しにくくなる
古い項目は日付で見せるほうがよい
- 「12 days ago」のような表現は、人が普段考える時間単位とうまく合わない
- 「last week」「last month」「last year」も範囲が広く、曖昧さが残る
- 昨日より古い項目には相対表現の代わりに特定の日付を表示するほうが、読みやすく信頼しやすい
3件のコメント
本物のGitHubもそうだし、YouTubeもそうだし、「数か月前」「数年前」みたいな表記が本当に嫌いです。下のHNの意見にもありますが、1年前と表示されていても実際には1年半前ということもあって、あまりにも曖昧です。
これは本当に共感できます。作る側としては、○○日前と表示すれば YY.MM.DD にするのか mmddyyyy にするのかなど、国ごとに異なる日付表記を気にしなくてよくはあるのですが、私は ○○日前 より日付を表示するほうがいいですね。
Hacker Newsのコメント
特に相対時間表示はあまりにも不正確になります。
YouTubeで「1年前」は、365日前から729日前まで何でもあり得ます。
「1年前」と表示された動画が2本あるとき、どちらがより最近のものか知るには、実際に動画を開いて説明欄まで行き、日付を見る必要があります。
頭の中で日付を計算したくないので、ただ正確なタイムスタンプを見せてくれればいいのです。
「1年前」のように大きな範囲の情報を捨てず、実際の時刻を表示すべきです。
YouTubeの「1年前」は365〜729日前の可能性がありますが、あるサイトでは最も近い年単位に丸めて183〜548日前を意味し、また別のサイトでは11か月までは月単位で丸めて、350〜548日前を「1年前」と扱います。
さらに別のところでは、「前の暦年の中」といった基準で、1〜365日前から364〜729日前まであり得るようになります。
2021年10月14日にアップされた動画が2年前であっても、その日のより遅い時刻にアップロードされていれば、まだ1年前と表示されることがあります。
例えば120秒前まで、120分前まで、48時間前まで、約61日前まで、その次は24か月前まで表示する、といった具合です。
一覧内の相対日付はおおむね我慢できますが、更新されない問題のほうがはるかに苛立たしく、「昨日」までに制限しても解決しません。
これはもっと強く推したいです。
幸い、タイムスタンプがツールチップで見える場合は多いです。
例えばnpmパッケージのバージョンを見るとき、「version 5.3.27 was released ‘about a year ago’」のように出ますが、正気なのかと思います。
古いパッケージのリリース順を把握して、互換性のあるパッケージ固定の組み合わせを作ろうとしているのに、連続する20個のパッケージがすべて「約1年前」と表示され、それぞれツールチップを開いて最近のバージョンか確認しなければなりません。
こういう設計は一線を越えていて、不規則な単数形・複数形のテーブル名をマッピングするORMを作る人たちと同類に見えます。
なぜ知らなかったのか分かりませんが、かなり便利です。
驚くべきなのは、そういう人たちがまだ雇われているだけでなく、この愚かな方式がnpmからGitHub、CircleCIまで、あちこちに広まっている点です。
さらに言えば、こうした丸められた相対タイムスタンプはそもそもなくしたいです。
iOSのMailアプリは特に腹立たしいです。
開くと「たった今アップデート」と出るのに、引っ張って更新すると2時間前に受信した未読メールが突然現れます。
ただ、いつ更新したのか正確な時刻を見せてくれればいいのです。
1時間以内に見られないとすぐ不正確になり、「1時間前」なのか「2時間前」なのかしか見えません。
ある通知が正確にいつ来たのかをどうしても知る必要があるかもしれないのに、確認する方法がまったくありません。
ただ時刻を表示すればよく、時刻は自分で読めます。
今日なら時刻だけを表示し、それ以外は完全な日付と時刻を表示します。
絶対時間を使えば、ブラウザがユーザーの好みの形式に合わせて表示できます。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...
ウェブデザイナーはサイトがピクセル単位まで特定の見た目になることを望み、クライアント側の表示制御はそれを妨げます。
依然として可能ではありますが、ウェブサイトがそうした用途を考慮して設計されたり、積極的に助けたりすることはないでしょう。
例ではiOS/Safariの出力はタグがないかのように見えます。
あいまいな日付表示で特に不便なのは、曜日が最も重要な情報である場合
たとえば GitLab の履歴を見るとき、「先週」や「2日前」よりも、金曜日にマージされたのかを知るほうがはるかに役に立つ
チャット履歴でも月の境目付近なら、その会話が月初の前なのか後なのかが重要になり得る
それ以外の場合でも、個人的には4週間前なのか2か月前なのかより正確な日付のほうがよく、正確な日付を出したからといって情報が減るわけでもない
あいまいな日付が正確な日付より有用な状況は想像しにくい
GitLab では設定を変えると、相対時間の代わりに絶対時間を使える
例: October 14, 2023 11:51AM
https://docs.gitlab.com/ee/user/profile/preferences.html#sho...
よく使うブラウザベースのソフトウェアには、こういうものを適用することを強く勧める
別のデータベースから情報を取得して再フォーマットし、ユーザーに表示するアプリケーションがあるのだが、更新コストが高く時間もかかるため、必要なときにユーザーが手動で実行しなければならない
この場合、最後に更新した正確な時刻はあまり重要ではなく、データがどれだけ古いか、つまり元データとずれている可能性がどの程度あるかが重要になる
情報によっては数時間たっただけでも再読み込みが必要だが、別の情報は4〜5日以上古くても問題なく、最大10分かかる更新をする必要がない
この目的では、最終更新時刻よりもおおよその古さを表示するほうが有用で、ユーザーが現在時刻と比べて計算しなくて済む
ただしこれはまれな例で、ほとんどの場合は相対的であいまいな日付のほうが有用性は低い
「このコメントの4〜5時間後くらいに終わる」「修正済みで、このコメントの約15時間後に次の実行を開始する」といった形
タイムスタンプをひどく表示するアプリの中で、自分が使っている最悪のものは gitg
このスクリーンショットを見ればよい
https://ubunlog.com/wp-content/uploads/2018/06/git-gui-gitg....
複数のコミットが「3日前」と表示されていて、情報がまったくないより少しマシな程度
午前なのか午後なのか、1時間以内に集中していたのか1日中に散らばっていたのかが分からない
顧客案件の作業時間を記録できず、1週間後に見積もらなければならないときはこうした情報が重要なので、コミットを1つずつクリックして画面の反対側にあるタイムスタンプを確認しなければならない
「数日前」表示をするだけでなく、自分が重要だと判断した項目を一番上に表示しようとする
そのため一部が重複した2つのリストが混ざって表示され、ひどさが倍増する
https://alesnosek.com/blog/2017/01/02/git-getting-the-timing...
両方表示すればよい
「1時間前 (15:47)」
「先週 (MON 12 SEP 9:20)」
「2年前 (WED 14 APR 2021 11:47)」
日付形式は好みでよい
もっと詳しく見たい人は、相対日付の上にマウスを置けばよい
数年後のユーザーインタビューで、ハイパーリンク風の下線だけではユーザーが「ここにマウスを置こう」とは考えないことが分かり、多くを元に戻した
絵文字や高解像度ディスプレイが一般的になった今なら、邪魔な疑問符や虫眼鏡の画像でツールチップのヒントを出せば、高齢者やあまり熟練していないユーザーには十分なのか気になる
年も含めるべき
Web フォーラムがコメントの日付を「5 Jul」のようにしか表示せず、あとになってそのコメントが何年も前のものだったと気づいたことがあまりにも多い
今では年のない日付はもう信用せず、最初から見えなければ何とかして年を探すようになった
週に何度か行くフォーラムがあるのだが、20〜30年続いているところなので日付が 08/11/02、09/03/04 のように表示され、とても紛らわしい
「1年前」は十分に正確でないことがあるが、「11か月前」はたいてい十分
こういう関数を実装するときは、1という数字を避けるようにしている
「1週間前」ではなく「6日前」と表示する、という具合
Google や web.archive.org のような場所に保存されると、ラベルがクライアント側で計算されない限り、インデックス作成日基準の相対時間になり得る
アーカイブでは JavaScript も正しく動作しない可能性が高い
また、日付をよりアクセシブルに表示するには、
timeタグとdatetime属性を使うことも検討に値するhttps://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...
まだブラウザでは
spanタグと大きく変わらないが、Web ページを将来互換にしておいて悪いことはない