Mercurial > eldonilo > blog
view date.js @ 15:5149a856d9dd default tip
Fix hybrid mode.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Thu, 03 Nov 2011 17:28:49 -0700 |
parents | 82905edac9d8 |
children |
line wrap: on
line source
Date.prototype.set8601 = function (string) { var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; var d = string.match(new RegExp(regexp)); var offset = 0; var date = new Date(d[1], 0, 1); if (d[3]) { date.setMonth(d[3] - 1); } if (d[5]) { date.setDate(d[5]); } if (d[7]) { date.setHours(d[7]); } if (d[8]) { date.setMinutes(d[8]); } if (d[10]) { date.setSeconds(d[10]); } if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } if (d[14]) { offset = (Number(d[16]) * 60) + Number(d[17]); offset *= ((d[15] == '-') ? 1 : -1); } offset -= date.getTimezoneOffset(); var time = (Number(date) + (offset * 60 * 1000)); this.setTime(Number(time)); return this; } Date.prototype.to8601 = function(){ function pad(n){return n<10 ? '0'+n : n} return this.getUTCFullYear()+'-' + pad(this.getUTCMonth()+1)+'-' + pad(this.getUTCDate())+'T' + pad(this.getUTCHours())+':' + pad(this.getUTCMinutes())+':' + pad(this.getUTCSeconds())+'Z'; } Date.prototype.getRelative = function(){ const s = 1000, m = s*60, h = m*60, d = h*24, y = d*365, M = y/12, ref = Date.now(), input = this.getTime(), delta = ref - input, year = Math.round((delta/y)*10)/10, month = Math.round((delta/M)*10)/10, day = Math.round((delta/d)*10)/10, hour = Math.round((delta/h)*10)/10, minute = Math.round((delta/m)*10)/10; if (year == 1) return "a year ago"; if (year > 1) return Math.round(year)+" years ago"; if (month == 1) return "a month ago"; if (month > 1) return Math.round(month)+" months ago"; if (day == 1) return "yesterday"; if (day > 1) return Math.round(day)+" days ago"; if (hour == 1) return "an hour ago"; if (hour > 1) return Math.round(hour)+" hours ago"; if (minute == 1) return "a minute ago"; if (minute > 1) return Math.round(minute)+" minutes ago"; return "just now"; };