Browse files

first commit

  • Loading branch information...
0 parents commit 0c50ec25162900f4a0cfd4a854cd5aa39ffa8ff0 @defunkt defunkt committed May 10, 2008
Showing with 97 additions and 0 deletions.
  1. +3 −0 README
  2. +94 −0 jquery.relatize_date.js
3 README
@@ -0,0 +1,3 @@
+This project is an extraction from GitHub.
+
+For this and other extractions, see http://github.com/github
94 jquery.relatize_date.js
@@ -0,0 +1,94 @@
+// All credit goes to Rick Olson.
+(function($) {
+ $.fn.relatizeDate = function() {
+ return $(this).each(function() {
+ $(this).text( $.relatizeDate(this) )
+ })
+ }
+
+ $.relatizeDate = function(element) {
+ return $.relatizeDate.timeAgoInWords( new Date($(element).text()) )
+ }
+
+ // shortcut
+ $r = $.relatizeDate
+
+ $.extend($.relatizeDate, {
+ shortDays: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
+ days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ shortMonths: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
+ months: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
+
+ /**
+ * Given a formatted string, replace the necessary items and return.
+ * Example: Time.now().strftime("%B %d, %Y") => February 11, 2008
+ * @param {String} format The formatted string used to format the results
+ */
+ strftime: function(date, format) {
+ var day = date.getDay(), month = date.getMonth();
+ var hours = date.getHours(), minutes = date.getMinutes();
+
+ var pad = function(num) {
+ var string = num.toString(10);
+ return new Array((2 - string.length) + 1).join('0') + string
+ };
+
+ return format.replace(/\%([aAbBcdHImMpSwyY])/g, function(part) {
+ switch(part[1]) {
+ case 'a': return $r.shortDays[day]; break;
+ case 'A': return $r.days[day]; break;
+ case 'b': return $r.shortMonths[month]; break;
+ case 'B': return $r.months[month]; break;
+ case 'c': return date.toString(); break;
+ case 'd': return pad(date.getDate()); break;
+ case 'H': return pad(hours); break;
+ case 'I': return pad((hours + 12) % 12); break;
+ case 'm': return pad(month + 1); break;
+ case 'M': return pad(minutes); break;
+ case 'p': return hours > 12 ? 'PM' : 'AM'; break;
+ case 'S': return pad(date.getSeconds()); break;
+ case 'w': return day; break;
+ case 'y': return pad(date.getFullYear() % 100); break;
+ case 'Y': return date.getFullYear().toString(); break;
+ }
+ })
+ },
+
+ timeAgoInWords: function(targetDate, includeTime) {
+ return $r.distanceOfTimeInWords(targetDate, new Date(), includeTime);
+ },
+
+ /**
+ * Return the distance of time in words between two Date's
+ * Example: '5 days ago', 'about an hour ago'
+ * @param {Date} fromTime The start date to use in the calculation
+ * @param {Date} toTime The end date to use in the calculation
+ * @param {Boolean} Include the time in the output
+ */
+ distanceOfTimeInWords: function(fromTime, toTime, includeTime) {
+ var delta = parseInt((toTime.getTime() - fromTime.getTime()) / 1000);
+ if (delta < 60) {
+ return 'less than a minute ago';
+ } else if (delta < 120) {
+ return 'about a minute ago';
+ } else if (delta < (45*60)) {
+ return (parseInt(delta / 60)).toString() + ' minutes ago';
+ } else if (delta < (120*60)) {
+ return 'about an hour ago';
+ } else if (delta < (24*60*60)) {
+ return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
+ } else if (delta < (48*60*60)) {
+ return '1 day ago';
+ } else {
+ var days = (parseInt(delta / 86400)).toString();
+ if (days > 5) {
+ var fmt = '%B %d, %Y'
+ if (includeTime) fmt += ' %I:%M %p'
+ return $r.strftime(fromTime, fmt);
+ } else {
+ return days + " days ago"
+ }
+ }
+ }
+ })
+})(jQuery);

0 comments on commit 0c50ec2

Please sign in to comment.