-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathfisforformat.min.js
11 lines (11 loc) · 7.88 KB
/
fisforformat.min.js
1
2
3
4
5
6
7
8
9
10
11
/*
* "f" is for Format & WHAT THE diff?? v0.5.0
*
* Copyright (c) 2009 Joshua Faulkenberry
* Dual licensed under the MIT and GPL licenses.
* http://docs.jquery.com/License
*
* Date: 2009-03-20 22:15:23 -0700 (Fri, 20 Mar 2009)
* Revision: 6
*/
window.Date.prototype.f=function(format){if(format=="@"){return this.getTime()}else{if(format=="REL"){var diff=(((new Date()).getTime()-this.getTime())/1000),day_diff=Math.floor(diff/86400);return day_diff==0&&(diff>-60&&"right now"||diff>-120&&"1 minute from now"||diff>-3600&&-(Math.floor(diff/60))+" minutes from now"||diff>-7200&&"1 hour ago"||diff>-86400&&-(Math.floor(diff/3600))+" hours from now"||diff<60&&"just now"||diff<120&&"1 minute ago"||diff<3600&&Math.floor(diff/60)+" minutes ago"||diff<7200&&"1 hour ago"||diff<86400&&Math.floor(diff/3600)+" hours ago")||day_diff==0&&"Tomorrow"||day_diff>-7&&-(day_diff)+" days from now"||-(Math.ceil(day_diff/7))==1&&"1 week from now"||day_diff>-78&&-(Math.ceil(day_diff/7))+" weeks from now"||day_diff>-730&&-(Math.ceil(day_diff/30))+" months from now"||day_diff<=-730&&-(Math.ceil(day_diff/365))+" years from now"||day_diff==1&&"Yesterday"||day_diff<7&&day_diff+" days ago"||(Math.ceil(day_diff/7))==1&&"1 week ago"||day_diff<78&&Math.ceil(day_diff/7)+" weeks ago"||day_diff<730&&Math.ceil(day_diff/30)+" months ago"||Math.ceil(day_diff/365)+" years ago"}}var MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"],DAY_NAMES=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],LZ=function(x){return(x<0||x>9?"":"0")+x},date=this,format=format+"",result="",i_format=0,c="",token="",y=date.getYear()+"",M=date.getMonth()+1,d=date.getDate(),E=date.getDay(),H=date.getHours(),m=date.getMinutes(),s=date.getSeconds(),yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k,value=new Object();if(y.length<4){y=""+(y-0+1900)}value.y=""+y;value.yyyy=y;value.yy=y.substr(2,4);value.M=M;value.MM=LZ(M);value.MMM=MONTH_NAMES[M-1];value.NNN=MONTH_NAMES[M-1].substr(0,3);value.N=MONTH_NAMES[M-1].substr(0,1);value.d=d;value.dd=LZ(d);value.e=DAY_NAMES[E].substr(0,1);value.ee=DAY_NAMES[E].substr(0,2);value.E=DAY_NAMES[E].substr(0,3);value.EE=DAY_NAMES[E];value.H=H;value.HH=LZ(H);if(H==0){value.h=12}else{if(H>12){value.h=H-12}else{value.h=H}}value.hh=LZ(value.h);if(H>11){value.K=H-12}else{value.K=H}value.k=H+1;value.KK=LZ(value.K);value.kk=LZ(value.k);if(H>11){value.a="PM"}else{value.a="AM"}value.m=m;value.mm=LZ(m);value.s=s;value.ss=LZ(s);while(i_format<format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c)&&(i_format<format.length)){token+=format.charAt(i_format++)}if(value[token]!=null){result=result+value[token]}else{result=result+token}}return result};window.Date.prototype.diff=function(date,breakdown){var options={};if(typeof date=="string"){if((new Date(date))!="Invalid Date"&&(new Date(date))!="NaN"){date=new Date(date)}else{breakdown=date;date=new Date()}}else{if(typeof date=="object"&&!date.getTime){options=date;date=new Date()}}if(typeof breakdown=="object"){options=breakdown;breakdown=options.breakdown||"*"}options.labels=options.labels||{};if(breakdown){function processTime(trg){var result=null;if(diff>=tl[trg]){if(trg=="Y"||trg=="D"||trg=="C"||trg=="T"){for(var yr=(min);yr.getFullYear()<=max.getFullYear();yr.setYear(yr.getFullYear()+1)){if(yr.isLeapYear()){diff-=tl.d}}}if(diff>=tl[trg]){result=Math.floor(diff/tl[trg])+" "+(Math.floor(diff/tl[trg])==1&&names[trg][0]||names[trg][1]);diff=diff%tl[trg]}}eval("breakdown = breakdown.replace(/"+trg+'/g, "")');return result}var min=date<=this&&date||date>this&&this,max=date>this&&date||date<=this&&this,diff=(max.getTime()-min.getTime()),tl={T:1000*60*60*24*365*100*10,C:1000*60*60*24*365*100,D:1000*60*60*24*365*10,Y:1000*60*60*24*365,M:1000*60*60*24*28,W:1000*60*60*24*7,d:1000*60*60*24,H:1000*60*60,m:1000*60,S:1000,N:1},names={T:options.labels.T||["Mellinium","Mellinia"],C:options.labels.C||["Century","Centuries"],D:options.labels.D||["Decade","Decades"],Y:options.labels.Y||["Year","Years"],M:options.labels.M||["Month","Months"],W:options.labels.W||["Week","Weeks"],d:options.labels.d||["Day","Days"],H:options.labels.H||["Hour","Hours"],m:options.labels.m||["Minute","Minutes"],S:options.labels.S||["Second","Seconds"],N:options.labels.N||["Millisecond","Milliseconds"]};if(options.len){for(var x in names){names[x]=names[x].substr(0,options.len)}}var testDt=new Date(min.toString());if(max.getFullYear()-testDt.getFullYear()>1){testDt.setYear(max.getFullYear()-1)}while(testDt<max){if(testDt.isDayLightSavingsDay()&&testDt.getMonth()<5){diff+=tl.H}else{if(testDt.isDayLightSavingsDay()){diff-=tl.H}}testDt.setDate(testDt.getDate()+1)}if(((max.getMonth()==max.getDayLightSavingsDays()[0].getMonth()&&max.getDate()<max.getDayLightSavingsDays()[0].getDate())||max.getMonth()<max.getDayLightSavingsDays()[0].getMonth())&&max.getMonth()==min.getMonth()){diff+=tl.H}else{if(((min.getMonth()==min.getDayLightSavingsDays()[1].getMonth()&&min.getDate()>min.getDayLightSavingsDays()[1].getDate())||min.getMonth()<min.getDayLightSavingsDays()[1].getMonth())&&min.getMonth()==min.getMonth()){diff-=tl.H}}var result=[],out;while(diff>0){if(breakdown=="*"){breakdown="TCDYMWdHmSN"}else{if(breakdown.indexOf("T")>-1){if(out=processTime("T")){result[result.length]=out}}else{if(breakdown.indexOf("C")>-1){if(out=processTime("C")){result[result.length]=out}}else{if(breakdown.indexOf("D")>-1){if(out=processTime("D")){result[result.length]=out}}else{if(breakdown.indexOf("Y")>-1){if(out=processTime("Y")){result[result.length]=out}}else{if(breakdown.indexOf("M")>-1){if(diff>=tl.M){var cur=(new Date(max.getTime()-diff));var monthCount=0;var lastVal=0;for(var yr=cur.getFullYear();yr<=max.getFullYear();yr++){while(cur.getFullYear()==yr){lastVal=cur.getTime();cur.setMonth(cur.getMonth()+1);if(diff-(cur.getTime()-lastVal)>=0){monthCount++;diff-=(cur.getTime()-lastVal)}if(yr==max.getFullYear()&&cur.getMonth()==max.getMonth()){break}}}if(monthCount){result[result.length]=monthCount+" "+(monthCount==1&&names.M[0]||names.M[1])}}breakdown=breakdown.replace(/M/g,"")}else{if(breakdown.indexOf("W")>-1){if(out=processTime("W")){result[result.length]=out}}else{if(breakdown.indexOf("d")>-1){if(out=processTime("d")){result[result.length]=out}}else{if(breakdown.indexOf("H")>-1){if(out=processTime("H")){result[result.length]=out}}else{if(breakdown.indexOf("m")>-1){if(out=processTime("m")){result[result.length]=out}}else{if(breakdown.indexOf("S")>-1){if(out=processTime("S")){result[result.length]=out}}else{if(breakdown.indexOf("N")>-1){if(out=processTime("N")){result[result.length]=out}}else{diff=0}}}}}}}}}}}}}options.divider=options.divider||", ";if(options.divider==", "&&result.length>1&&!options.hideAnd){result[result.length-1]="and "+result[result.length-1]}diff=result.join(options.divider)}if(diff==""){diff="Same"}if(options.lc){diff=diff.toLowerCase()}return diff};window.Date.prototype.getDaysInMonth=function(){return[31,28,31,30,31,30,31,31,30,31,30,31][this.getMonth()]};window.Date.prototype.isLeapYear=function(){return(new Date(this.getFullYear(),2-1,29)).getDate()==29};window.Date.prototype.getDayLightSavingsDays=function(){var result=[];var day1=new Date("03/07/"+this.getFullYear());var day2=new Date("03/06/"+this.getFullYear());while(day1.getMonth()<3||(day1.getMonth()==3&&day1.getDate()<16)){if((day1.getTime()-day2.getTime())/1000/60/60!=24){result[result.length]=new Date(day2.getTime())}day1.setDate(day1.getDate()+1);day2.setDate(day2.getDate()+1)}var day1=new Date("10/31/"+this.getFullYear());var day2=new Date("10/30/"+this.getFullYear());while(day1.getMonth()<11||(day1.getMonth()==10&&day1.getDate()<9)){if((day1.getTime()-day2.getTime())/1000/60/60!=24){result[result.length]=new Date(day2.getTime())}day1.setDate(day1.getDate()+1);day2.setDate(day2.getDate()+1)}return result};window.Date.prototype.isDayLightSavingsDay=function(){var comp=new Date(this.getTime());comp.setDate(comp.getDate()+1);return(comp.getTime()-this.getTime())/1000/60/60!=24};