Last active
December 18, 2015 21:38
-
-
Save shimondoodkin/5848747 to your computer and use it in GitHub Desktop.
date functions i use
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date.prototype.isValid = function() { | |
if ( Object.prototype.toString.call(this) !== "[object Date]" ) | |
return false; | |
return !isNaN(this.getTime()); | |
} | |
//////////// | |
/* | |
* Date Format 1.2.3 | |
* (c) 2007-2009 Steven Levithan <stevenlevithan.com> | |
* MIT license | |
* | |
* Includes enhancements by Scott Trenda <scott.trenda.net> | |
* and Kris Kowal <cixar.com/~kris.kowal/> | |
* | |
* Accepts a date, a mask, or a date and a mask. | |
* Returns a formatted version of the given date. | |
* The date defaults to the current date/time. | |
* The mask defaults to dateFormat.masks.default. | |
*/ | |
var dateFormat = function () { | |
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[zLloSZ]|"[^"]*"|'[^']*'/g, | |
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, | |
timezoneClip = /[^-+\dA-Z]/g, | |
pad = function (val, len) { | |
val = String(val); | |
len = len || 2; | |
while (val.length < len) val = "0" + val; | |
return val; | |
}; | |
// Regexes and supporting functions are cached through closure | |
return function (date, mask, utc) { | |
var dF = dateFormat; | |
// You can't provide utc if you skip other args (use the "UTC:" mask prefix) | |
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { | |
mask = date; | |
date = undefined; | |
} | |
// Passing date through Date applies Date.parse, if necessary | |
date = date ? new Date(date) : new Date; | |
if (isNaN(date)) throw SyntaxError("invalid date"); | |
mask = String(dF.masks[mask] || mask || dF.masks["default"]); | |
// Allow setting the utc argument via the mask | |
if (mask.slice(0, 4) == "UTC:") { | |
mask = mask.slice(4); | |
utc = true; | |
} | |
var _ = utc ? "getUTC" : "get", | |
d = date[_ + "Date"](), | |
D = date[_ + "Day"](), | |
m = date[_ + "Month"](), | |
y = date[_ + "FullYear"](), | |
H = date[_ + "Hours"](), | |
M = date[_ + "Minutes"](), | |
s = date[_ + "Seconds"](), | |
L = date[_ + "Milliseconds"](), | |
z = date[_ + "Milliseconds"]()*1000, | |
o = utc ? 0 : date.getTimezoneOffset(), | |
flags = { | |
d: d, | |
dd: pad(d), | |
ddd: dF.i18n.dayNames[D], | |
dddd: dF.i18n.dayNames[D + 7], | |
m: m + 1, | |
mm: pad(m + 1), | |
mmm: dF.i18n.monthNames[m], | |
mmmm: dF.i18n.monthNames[m + 12], | |
yy: String(y).slice(2), | |
yyyy: y, | |
h: H % 12 || 12, | |
hh: pad(H % 12 || 12), | |
H: H, | |
HH: pad(H), | |
M: M, | |
MM: pad(M), | |
s: s, | |
ss: pad(s), | |
l: pad(L, 3), | |
L: pad(L > 99 ? Math.round(L / 10) : L), | |
z: pad(z, 6), | |
t: H < 12 ? "a" : "p", | |
tt: H < 12 ? "am" : "pm", | |
T: H < 12 ? "A" : "P", | |
TT: H < 12 ? "AM" : "PM", | |
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), | |
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), | |
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] | |
}; | |
return mask.replace(token, function ($0) { | |
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); | |
}); | |
}; | |
}(); | |
// Some common format strings | |
dateFormat.masks = { | |
"default": "ddd mmm dd yyyy HH:MM:ss", | |
shortDate: "m/d/yy", | |
IsraelFull: "d/m/yyyy HH:MM:ss", | |
IsraelShort: "dd/mm/yyyy", | |
mediumDate: "mmm d, yyyy", | |
longDate: "mmmm d, yyyy", | |
fullDate: "dddd, mmmm d, yyyy", | |
shortTime: "h:MM TT", | |
mediumTime: "h:MM:ss TT", | |
longTime: "h:MM:ss TT Z", | |
isoDate: "yyyy-mm-dd", | |
mysqlDateTime: "yyyy-mm-dd HH:MM:ss.z", | |
mysqlDateTime2: "yyyy-mm-dd HH:MM", | |
isoTime: "HH:MM:ss", | |
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", | |
isoDateTime2: "yyyy-mm-dd HH:MM:ss", | |
isoDateTime3: "yyyy-m-d H:M:s", | |
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'", | |
isoRFC: "ddd, d mmm yyyy HH:MM:ss o", | |
rfc: "ddd, d mmm yyyy HH:MM:ss Z" | |
}; | |
// Internationalization strings | |
dateFormat.i18n = { | |
dayNames: [ | |
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", | |
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" | |
], | |
monthNames: [ | |
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | |
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" | |
] | |
}; | |
// For convenience... | |
Date.prototype.format = function (mask, utc) { | |
return dateFormat(this, mask, utc); | |
}; | |
//////////////////End of Date Format lib////////////////////////// | |
function date_in_GMT(inDate) | |
{ | |
if(!inDate.getTimezoneOffset)return inDate; | |
var date = new Date(); | |
date.setTime(inDate.valueOf() - 60000 * inDate.getTimezoneOffset()); | |
return date; | |
} | |
exports.date_in_GMT=date_in_GMT; | |
var re_num=/^[-]{0,1}\d+[\.]{0,1}\d*$/; | |
function make_date(s,dateprefix) | |
{ | |
s=s.trim(); | |
if(s.indexOf('/')!=-1&&s.indexOf(':')!=-1) | |
{ | |
//throw new Error("date parse format not developed xx:xx xx/xx/xx or xx/xx/xx xx:xx") | |
//s.split(':'); | |
} | |
else if(s.length<=5&&s.indexOf(':')!=-1) | |
{ | |
// a.setFullYear(numYear[, numMonth[, numDate]]); | |
//a.setHours(numHours[, numMin[, numSec[, numMilli]]]); | |
var datepre=dateprefix||(new Date()).toDateString(); | |
var r=(new Date(datepre+" "+s+":00")); | |
//var s=s.split(":"); | |
//r.setHours(s[0],s[1],s[2]||0) | |
return r; | |
} | |
else if(s.length<=5&&s.indexOf('/')!=-1) | |
{ | |
// throw new Error("date parse format not developed xx/xx/xx") | |
// s.split(':'); | |
} | |
return s; | |
} | |
function make_number(s,dateprefix) | |
{ | |
if(s.indexOf(':')!=-1||s.indexOf('/')!=-1) | |
return make_date(s,dateprefix); | |
s=s.trim().replace(/,/g,"").replace('%',""); | |
if(re_num.test(s)) return parseFloat(s); | |
return s; | |
} | |
exports.make_number=make_number; | |
// actually i don't use the folowing function rather i use | |
// ver d=new Date() | |
// d.setDate( d.getDate() +1) // next day - it works in all set date part functions, it simply overflows over and under for negative numbers. | |
// date manuvers: | |
// d.setDate( 1) // first of the month | |
// d.setDate( 32 ); d.setDate( 1-d.getDate()) // 1st day of the next month | |
// d.setDate( d.getDate()-1) // last day of the previous month | |
Date.prototype.dateAdd=function(timeU,byMany) { | |
var millisecond=1; | |
var second=millisecond*1000; | |
var minute=second*60; | |
var hour=minute*60; | |
var day=hour*24; | |
var year=day*365; | |
var newDate; | |
var dVal=this.getTime(); | |
switch(timeU) { | |
case "ms": newDate=new Date(dVal+(millisecond*byMany)); break; | |
case "s": newDate=new Date(dVal+(second*byMany)); break; | |
case "m": newDate=new Date(dVal+(minute*byMany)); break; | |
case "h": newDate=new Date(dVal+(hour*byMany)); break; | |
case "d": newDate=new Date(dVal+(day*byMany)); break; | |
case "y": newDate=new Date(dVal+(year*byMany)); break; | |
} | |
return newDate; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment