Nên hiển thị ngày thực tế cho các mục cũ hơn hôm qua
(grumpy.website)- Nhãn ngày tương đối trong web UI trông giống cách con người nói, nhưng thường không khớp với cách người dùng thực sự hình dung về ngày tháng
- Với con người, “yesterday” là ngày liền trước hôm nay từ 0:00 đến 23:59, chứ không đơn thuần là “ít hơn 24 giờ”
- Nếu mỗi cách triển khai dùng một tiêu chuẩn khác nhau, thì ngay trong cùng một dịch vụ, cách hiển thị “yesterday” cũng sẽ thiếu nhất quán, làm giảm độ tin cậy của việc hiển thị ngày tháng
- Cách chỉ hiển thị số ngày đã qua như “12 days ago” tạo cảm giác xa rời cách con người tự nhiên cảm nhận về thời gian
- “last week/month/year” cũng có phạm vi rộng và mơ hồ, nên với các mục cũ hơn hôm qua, hiển thị ngày cụ thể sẽ rõ ràng hơn
Vì sao nhãn ngày tương đối dễ gây bối rối
- Những cách diễn đạt như “yesterday”, “2 days ago”, “a week ago” trông giống cách biểu đạt thời gian mang tính con người, nhưng lại không đủ chính xác để xác định ngày tháng thực tế
- Đặc biệt, “yesterday” có một ý nghĩa rất rõ ràng theo kỳ vọng của người dùng
- Nghĩa là ngày liền trước hôm nay
- Chỉ khoảng thời gian từ 0:00 đến 23:59 của ngày hôm trước
- Khác với công thức tính kiểu “ít hơn 24 giờ”
- Máy tính có thể triển khai cách tính “yesterday” theo nhiều cách khác nhau, và nếu cách hiển thị thay đổi ngay trong cùng một dịch vụ, người dùng sẽ bớt tin vào thông tin ngày tháng hơn
Với các mục cũ hơn, hiển thị bằng ngày tháng sẽ tốt hơn
- Những cách diễn đạt như “12 days ago” không thật sự khớp với đơn vị thời gian mà con người thường nghĩ đến
- “last week”, “last month”, “last year” cũng có phạm vi rộng nên vẫn để lại sự mơ hồ
- Với các mục cũ hơn hôm qua, thay vì dùng cách diễn đạt tương đối, hiển thị ngày cụ thể sẽ dễ đọc và đáng tin hơn
3 bình luận
GitHub thật sự cũng vậy, YouTube cũng vậy, tôi cực kỳ ghét kiểu hiển thị như vài tháng trước, vài năm trước. Như ý kiến trên HN bên dưới cũng nói, có khi ghi là 1 năm trước nhưng thực ra đã là 1 năm rưỡi rồi, rất mơ hồ.
Cái này đúng là rất đồng cảm. Ở góc độ người làm ra sản phẩm thì nếu hiển thị kiểu “xx ngày trước” sẽ không phải bận tâm đến các cách ghi ngày tháng khác nhau theo từng quốc gia như YY.MM.DD hay mmddyyyy, nhưng cá nhân tôi vẫn thấy hiển thị ngày tháng sẽ tốt hơn là “xx ngày trước”.
Ý kiến trên Hacker News
Đặc biệt, hiển thị thời gian tương đối trở nên quá thiếu chính xác
Trên YouTube, “1 năm trước” có thể là bất cứ lúc nào từ 365 ngày trước đến 729 ngày trước
Muốn biết trong hai video đều hiển thị “1 năm trước” thì video nào gần đây hơn, thực tế phải mở video rồi vào phần mô tả để xem ngày
Vì không muốn tính ngày trong đầu, chỉ cần hiển thị timestamp chính xác là được
Đừng vứt bỏ thông tin trong một khoảng lớn kiểu “1 năm trước”, mà hãy hiển thị thời gian thực tế
“1 năm trước” của YouTube có thể là 365–729 ngày trước, nhưng có trang lại làm tròn theo đơn vị năm gần nhất, nghĩa là 183–548 ngày trước; trang khác thì làm tròn theo tháng đến 11 tháng, rồi coi 350–548 ngày trước là “1 năm trước”
Có nơi khác lại dùng tiêu chí kiểu “trong năm dương lịch trước”, khiến khoảng này có thể từ 1–365 ngày trước đến cả 364–729 ngày trước
Một video đăng ngày 14/10/2021 dù đã là 2 năm trước, nhưng nếu được tải lên vào thời điểm muộn hơn trong ngày đó thì vẫn có thể hiển thị là 1 năm trước
Ví dụ hiển thị đến 120 giây trước, đến 120 phút trước, đến 48 giờ trước, đến khoảng 61 ngày trước, rồi sau đó đến 24 tháng trước
Ngày tương đối trong danh sách nói chung còn chịu được, nhưng vấn đề không được cập nhật còn khó chịu hơn nhiều, và giới hạn chỉ đến “hôm qua” cũng không giải quyết được
Tôi muốn khuyến nghị điều này mạnh mẽ hơn nữa
May là timestamp thường hiện dưới dạng tooltip
Ví dụ khi xem phiên bản gói npm, nó hiện kiểu “version 5.3.27 was released ‘about a year ago’”, thấy như mất trí vậy
Tôi đang cố nắm thứ tự phát hành của các gói cũ để lập một bộ phiên bản gói cố định tương thích, nhưng 20 gói liên tiếp đều hiển thị “khoảng 1 năm trước”, nên phải mở tooltip từng cái để kiểm tra xem có phải bản gần đây không
Kiểu thiết kế này đã vượt quá giới hạn, và trông cùng một loại với những người tạo ORM ánh xạ tên bảng số ít/số nhiều bất quy tắc
Không hiểu sao trước giờ tôi không biết, và nó khá hữu ích
Điều đáng kinh ngạc là những người đó không chỉ vẫn còn được tuyển dụng, mà cách làm ngu ngốc này còn lan ra everywhere, từ npm đến GitHub rồi CircleCI
Xa hơn nữa, tôi muốn loại bỏ hẳn các timestamp tương đối đã làm tròn kiểu này
Ứng dụng Mail trên iOS đặc biệt gây bực mình
Mở lên thì nó hiện “vừa cập nhật”, nhưng kéo để làm mới thì một email chưa đọc nhận từ 2 giờ trước bỗng nhiên xuất hiện
Chỉ cần hiển thị thời gian chính xác lúc cập nhật là được
Nếu không xem trong vòng một giờ, nó lập tức trở nên thiếu chính xác và chỉ còn thấy “1 giờ trước” hay “2 giờ trước”
Có thể có lúc nhất thiết phải biết một thông báo đến chính xác lúc nào, nhưng hoàn toàn không có cách kiểm tra
Chỉ cần hiển thị giờ là được, giờ thì tôi đọc được
Nếu là hôm nay thì chỉ hiển thị giờ, còn ngoài ra thì hiển thị đầy đủ ngày và giờ
Nếu dùng thời gian tuyệt đối, trình duyệt có thể hiển thị theo định dạng người dùng ưa thích
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...
Các nhà thiết kế web muốn trang có hình dạng cụ thể đến từng pixel, và quyền kiểm soát hiển thị phía client cản trở điều đó
Vẫn có thể làm được, nhưng website sẽ không được thiết kế cho mục đích đó hoặc chủ động hỗ trợ việc đó
Trong ví dụ, đầu ra iOS/Safari trông như không có thẻ vậy
Điều đặc biệt bất tiện ở cách hiển thị ngày tháng mơ hồ là khi thứ trong tuần mới là thông tin quan trọng nhất
Ví dụ khi xem lịch sử GitLab, biết một thay đổi được merge vào thứ Sáu hữu ích hơn nhiều so với “tuần trước” hay “2 ngày trước”
Với lịch sử chat cũng vậy, nếu gần ranh giới giữa các tháng thì việc cuộc trò chuyện diễn ra trước hay sau đầu tháng có thể rất quan trọng
Trong các trường hợp khác, cá nhân tôi vẫn thích ngày chính xác hơn là biết 4 tuần trước hay 2 tháng trước, và việc đưa ra ngày chính xác cũng không làm giảm lượng thông tin
Khó mà tưởng tượng được tình huống nào ngày tháng mơ hồ lại hữu ích hơn ngày chính xác
Trong GitLab, nếu đổi thiết lập thì có thể dùng thời gian tuyệt đối thay cho thời gian tương đối
Ví dụ: October 14, 2023 11:51AM
https://docs.gitlab.com/ee/user/profile/preferences.html#sho...
Rất khuyến nghị áp dụng những thứ như vậy cho các phần mềm nền web bạn dùng thường xuyên
Có một ứng dụng lấy thông tin từ cơ sở dữ liệu khác, định dạng lại rồi hiển thị cho người dùng; chi phí cập nhật lớn và mất thời gian nên người dùng phải tự chạy thủ công khi cần
Trong trường hợp này, thời điểm chính xác của lần cập nhật cuối không quan trọng lắm; điều quan trọng là dữ liệu đã cũ đến mức nào, tức khả năng nó đã lệch so với nguồn gốc là bao nhiêu
Một số thông tin chỉ vài giờ là đã cần refresh, nhưng một số thông tin dù cũ hơn 4–5 ngày vẫn ổn nên không cần chạy cập nhật có thể mất tới 10 phút
Với mục đích này, hiển thị độ cũ xấp xỉ hữu ích hơn thời điểm cập nhật cuối, và người dùng không cần tự so sánh với thời gian hiện tại để tính toán
Tuy vậy đây là trường hợp hiếm, còn đa số thì ngày tháng tương đối mơ hồ kém hữu ích hơn
Kiểu như “kết thúc khoảng 4–5 tiếng sau bình luận này”, “đã sửa và sẽ bắt đầu lần chạy tiếp theo khoảng 15 tiếng sau bình luận này”
Trong các ứng dụng tôi dùng hiển thị timestamp sai cách, tệ nhất là gitg
Xem ảnh chụp màn hình này là rõ
https://ubunlog.com/wp-content/uploads/2018/06/git-gui-gitg....
Nhiều commit được hiển thị là “3 ngày trước”, chỉ khá hơn một chút so với không có thông tin gì
Không thể biết đó là buổi sáng hay buổi chiều, các commit dồn trong vòng một giờ hay trải đều cả ngày
Khi không ghi lại được thời gian làm việc cho khách hàng và phải ước tính sau một tuần, những thông tin như vậy rất quan trọng, nên tôi phải bấm từng commit và kiểm tra timestamp ở phía đối diện màn hình
Không chỉ hiển thị “vài ngày trước”, nó còn cố đưa lên trên các mục mà nó tự cho là quan trọng
Kết quả là hai danh sách có một phần trùng lặp bị trộn vào nhau, mức kinh khủng tăng gấp đôi
https://alesnosek.com/blog/2017/01/02/git-getting-the-timing...
Cứ hiển thị cả hai là được
“1 giờ trước (15:47)”
“tuần trước (MON 12 SEP 9:20)”
“2 năm trước (WED 14 APR 2021 11:47)”
Định dạng ngày thì tùy sở thích
Ai muốn xem chi tiết hơn thì chỉ cần rê chuột lên ngày tương đối
Vài năm sau, các cuộc phỏng vấn người dùng cho thấy chỉ gạch chân kiểu hyperlink thôi không khiến người dùng nghĩ “mình nên rê chuột vào đây”, nên tôi đã đảo ngược lại khá nhiều
Giờ emoji và màn hình độ phân giải cao đã phổ biến, tôi tự hỏi liệu việc dùng một dấu hỏi hoặc biểu tượng kính lúp hơi nổi bật để làm gợi ý tooltip có đủ cho người dùng lớn tuổi hoặc ít thành thạo hơn không
Cũng phải bao gồm cả năm
Tôi đã quá nhiều lần gặp diễn đàn web chỉ hiển thị ngày bình luận kiểu “5 Jul”, rồi mãi sau mới nhận ra bình luận đó là bài từ nhiều năm trước
Giờ tôi không còn tin ngày không có năm nữa, và nếu ngay từ đầu không thấy năm thì kiểu gì tôi cũng tìm cho ra
Có một diễn đàn tôi vào vài lần mỗi tuần, tồn tại 20–30 năm rồi, nên ngày tháng kiểu 08/11/02, 09/03/04 rất dễ gây nhầm lẫn
“1 năm trước” có thể chưa đủ chính xác, nhưng “11 tháng trước” thì thường là đủ
Khi triển khai hàm kiểu này, tôi thường tránh con số 1
Ví dụ hiển thị “6 ngày trước” thay vì “1 tuần trước”
Khi được lưu trữ ở những nơi như Google hoặc web.archive.org, nếu nhãn không được tính ở phía client thì thời gian tương đối có thể trở thành thời gian tính theo ngày lập chỉ mục
Trong bản lưu trữ, JavaScript cũng rất có khả năng không hoạt động đúng
Ngoài ra, để hiển thị ngày tháng dễ tiếp cận hơn, cũng đáng cân nhắc dùng thẻ
timevà thuộc tínhdatetimehttps://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...
Hiện tại trong trình duyệt nó chưa khác
spanlà mấy, nhưng làm trang web tương thích tốt hơn với tương lai thì cũng chẳng hại gì