User:Genius101/time.js

$(function()

{

if (wgCanonicalNamespace == '' || wgCanonicalNamespace == 'MediaWiki' || wgCanonicalNamespace == 'Special')

return;

var disabled_urls = new Array('action=history');

for (var i = 0; i < disabled_urls.length; i++)

{

if (document.location.href.indexOf(disabled_urls[i]) != -1)

return;

}

var unique_url = false;

var wikiPreview = new Array('action=edit', 'action=submit');

for (var i = 0; i < wikiPreview.length; i++)

{

if (document.location.href.indexOf(wikiPreview[i]) != -1)

unique_url = 'wikiPreview';

}

var element_id = unique_url ? unique_url : 'bodyContent';

document.getElementById(element_id).innerHTML =

document.getElementById(element_id).innerHTML.replace(/(\d\d):(\d\d), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/g, adjustTime);

});

function add_leading_zero(number)

{

if (number < 10)

number = "0" + number;

return number;

}

function adjustTime(str, old_hour, old_minute, old_day, old_month, old_year, offset, s)

{

var today = new Date();

var yesterday = new Date();

yesterday.setDate(yesterday.getDate() - 1);

// set the date entered

var time = new Date();

time.setUTCHours(old_hour);

time.setUTCMinutes(old_minute);

// fix for when the date is the 31st of the month

if (old_day == '31')

time.setUTCDate('30');

else

time.setUTCDate(old_day);

time.setUTCMonth(convert_month_to_number(old_month));

time.setUTCFullYear(old_year);

// figure out what the time offset is

var utc_offset = -1 * time.getTimezoneOffset() / 60;

if (utc_offset >= 0)

utc_offset = '+' + utc_offset;

// set the date bits to output

var year = time.getFullYear();

var month = add_leading_zero(time.getMonth() + 1);

// fix for when the date is the 31st of the month

if (old_day == '31')

var day = time.getDate() + 1;

else

var day = time.getDate();

var hour = add_leading_zero(parseInt(time.getHours()));

var minute = add_leading_zero(time.getMinutes());

// output am or pm depending on the date

var ampm = 'am';

if (hour > 11)

ampm = 'pm';

if (hour > 12)

hour -= 12;

if (hour == '00')

hour = 12;

// Return 'today' or 'yesterday' if that is the case

if (year == today.getFullYear() && month == add_leading_zero(today.getMonth() + 1) && day == today.getDate())

var date = 'Today';

else if (year == yesterday.getFullYear() && month == add_leading_zero(yesterday.getMonth() + 1) && day == yesterday.getDate())

var date = 'Yesterday';

else

{

// Calculate day of week

var day_names = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

var day_of_the_week = day_names[time.getDay()];

// The distance in days from today and last Monday?

today = new Date(today.getYear(), today.getMonth(), today.getDate());

time = new Date(time.getYear(), time.getMonth(), time.getDate());

// Calculate time difference

var milliseconds_ago = today.getTime() - time.getTime();

var days_ago = milliseconds_ago / 1000 / 60 / 60 / 24;

days_ago = Math.round(days_ago);

if (days_ago <= 7)

var last = 'last ';

else

var last = '';

// The difference between today and the timestamp

var difference, difference_word = '';

if (today.valueOf() >= time.valueOf())

{

difference = new Date(today.valueOf() - time.valueOf());

difference_word = 'ago';

}

else

{

difference = new Date(time.valueOf() - today.valueOf());

difference_word = 'from now';

}

var descriptive_difference = [];

if (difference.getYear() - 70 > 0)

{

var years_ago = (difference.getYear() - 70) + ' ' + 'year'.pluralize(difference.getYear() - 70, 'years');

descriptive_difference.push(years_ago);

}

if (difference.getMonth() > 0)

{

var months_ago = difference.getMonth() + ' ' + 'month'.pluralize(difference.getMonth(), 'months');

descriptive_difference.push(months_ago);

}

if (difference.getDate() > 0)

{

var days_ago = difference.getDate() + ' ' + 'day'.pluralize(difference.getDate(), 'days');

descriptive_difference.push(days_ago);

}

var date = year + '-' + month + '-' + add_leading_zero(day) + ', ' + last + day_of_the_week + ' (' + descriptive_difference.join(', ') + ' ' + difference_word + ')';

}

var time = hour + ':' + minute + ' ' + ampm;

var return_date = date + ', ' + time + ' (UTC' + utc_offset + ')';

return "" + return_date.replace(/ /g, ' ') + '';

}

function convert_month_to_number(month)

{

var tmp = new Date(month + " 1, 2006");

return tmp.getMonth();

}

String.prototype.pluralize = function(count, plural)

{

if (plural == null)

plural = this + 's';

return (count == 1 ? this : plural)

}