Làm cách nào tôi có thể thao tác ngày để chúng hiển thị là "vừa mới" ... "5 phút trước" ... "3 giờ trước" ... "ngày 22 tháng 6 năm 2010 lúc 1:45 chiều" theo cách tương tự cách SO hiển thị ngày bên cạnh câu trả lời/nhận xét cho mỗi câu hỏi?Làm cách nào để hiển thị các trình duyệt chéo ngày tương đối đến tuyệt đối?
Để các vấn đề phức tạp hơn, ngày được lưu trữ trong cơ sở dữ liệu của tôi là theo giờ GMT (điều này là tốt), nhưng tôi muốn chúng xuất hiện trong múi giờ của từng trình duyệt của người dùng.
Tôi đã thử plugin ngày tháng đẹp của John Resig: http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/ và tôi đã chỉnh sửa nó để nó trừ chênh lệch múi giờ từ giờ GMT trong cơ sở dữ liệu. Tuy nhiên, giải pháp này chỉ hoạt động trong FireFox.
Đây là chức năng 'prettydate' sau khi tôi đã thêm múi giờ bù đắp:
format : function(time) {
var date = new Date(time);
var currentDate = new Date();
var timezoneOffsetInMilliseconds = currentDate.getTimezoneOffset() * 60000;
var currentTimeInMillisecondsUtc = currentDate.getTime();
var givenTimeInMillisecondsUtc = date.getTime()- timezoneOffsetInMilliseconds;
var diffInSeconds = ((currentTimeInMillisecondsUtc - givenTimeInMillisecondsUtc)/1000);
var day_diff = Math.floor(diffInSeconds/86400);
if (isNaN(day_diff) || day_diff < 0)
return;
// If longer than a month, calculate the date w/ timezone offset
if (day_diff >= 31)
return new Date(givenTimeInMillisecondsUtc).toLocaleString();
var messages = $.prettyDate.messages;
return day_diff == 0 && (diffInSeconds < 60 && messages.now
|| diffInSeconds < 120 && messages.minute
|| diffInSeconds < 3600
&& messages.minutes(Math.floor(diffInSeconds/60))
|| diffInSeconds < 7200 && messages.hour || diffInSeconds < 86400
&& messages.hours(Math.floor(diffInSeconds/3600)))
|| day_diff == 1 && messages.yesterday || day_diff < 7
&& messages.days(day_diff) || day_diff < 31
&& messages.weeks(Math.ceil(day_diff/7));
}
Edit: Tôi đang sử dụng Python với Django mẫu (thông qua Google webapp), và 'thời gian' đối tượng tôi 'm đi qua trong một 'db.DateTimeProperty()' trong các định dạng iso như vậy:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
Câu hỏi từ người nào đó chỉ sử dụng Ngày tình cờ: bạn không thể đặt ngày bằng cách sử dụng các phương thức setUTC *()? Nó sẽ không tự động chuyển đổi thành giờ địa phương? – brainjam
Cảm ơn, tôi có thể thử làm điều đó. Tuy nhiên, điều đó vẫn không giúp phần trình duyệt chéo, mà thực sự là vấn đề lớn hơn ở đây. – Cuga