| /** |
| * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. |
| * |
| * This software is licensed under the GNU General Public License v3 or later. |
| * |
| * It is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation, either version 3 of the License, or any later version. |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| * |
| */ |
| |
| Date.prototype.setISO8601 = function(dString){
|
|
|
| var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
|
|
|
| if (dString.toString().match(new RegExp(regexp))) {
|
| var d = dString.match(new RegExp(regexp));
|
| var offset = 0;
|
|
|
| this.setUTCDate(1);
|
| this.setUTCFullYear(parseInt(d[1],10));
|
| this.setUTCMonth(parseInt(d[3],10) - 1);
|
| this.setUTCDate(parseInt(d[5],10));
|
| this.setUTCHours(parseInt(d[7],10));
|
| this.setUTCMinutes(parseInt(d[9],10));
|
| this.setUTCSeconds(parseInt(d[11],10));
|
| if (d[12])
|
| this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
|
| else
|
| this.setUTCMilliseconds(0);
|
| if (d[13] != 'Z') {
|
| offset = (d[15] * 60) + parseInt(d[17],10);
|
| offset *= ((d[14] == '-') ? -1 : 1);
|
| this.setTime(this.getTime() - offset * 60 * 1000);
|
| }
|
| }
|
| else {
|
| this.setTime(Date.parse(dString));
|
| }
|
| return this;
|
| };
|
|
|
| //***** vmops (begin) ***************************************************************
|
|
|
| /*
|
| This is a hack/temporary solution that lacks calculation of Daylight Saving Time.
|
| We'll fix the problem by getting datetime in a specified timezone (including Daylight Saving Time) from server-side in next release.
|
| */
|
| Date.prototype.getTimePlusTimezoneOffset = function(timezoneOffset) {
|
| var milliseconds = this.getTime();
|
| var s1 = new Date(milliseconds + (timezoneOffset * 60 * 60 * 1000)).toUTCString(); //e.g. "Tue, 08 Jun 2010 19:13:49 GMT", "Tue, 25 May 2010 12:07:01 UTC"
|
| var s2 = s1.substring(s1.indexOf(", ")+2); //e.g. "08 Jun 2010 19:13:49 GMT", "25 May 2010 12:07:01 UTC"
|
| var s3 = s2.substring(0,s2.length-4); //e.g. "08 Jun 2010 19:13:49", "25 May 2010 12:10:16"
|
| return s3;
|
| }
|
|
|
| //***** vmops (end) *****************************************************************
|
|
|
| Date.prototype.format = function(format) {
|
| var returnStr = '';
|
| var replace = Date.replaceChars;
|
| for (var i = 0; i < format.length; i++) {
|
| var curChar = format.charAt(i);
|
| if (replace[curChar]) {
|
| returnStr += replace[curChar].call(this);
|
| } else {
|
| returnStr += curChar;
|
| }
|
| }
|
| return returnStr;
|
| };
|
| Date.replaceChars = {
|
| shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
| longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
| shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
| longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
|
| // Day
|
| d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); },
|
| D: function() { return Date.replaceChars.shortDays[this.getDay()]; },
|
| j: function() { return this.getDate(); },
|
| l: function() { return Date.replaceChars.longDays[this.getDay()]; },
|
| N: function() { return this.getDay() + 1; },
|
| S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); },
|
| w: function() { return this.getDay(); },
|
| z: function() { return "Not Yet Supported"; },
|
| // Week
|
| W: function() { return "Not Yet Supported"; },
|
| // Month
|
| F: function() { return Date.replaceChars.longMonths[this.getMonth()]; },
|
| m: function() { return (this.getMonth() < 9 ? '0' : '') + (this.getMonth() + 1); },
|
| M: function() { return Date.replaceChars.shortMonths[this.getMonth()]; },
|
| n: function() { return this.getMonth() + 1; },
|
| t: function() { return "Not Yet Supported"; },
|
| // Year
|
| L: function() { return "Not Yet Supported"; },
|
| o: function() { return "Not Supported"; },
|
| Y: function() { return this.getFullYear(); },
|
| y: function() { return ('' + this.getFullYear()).substr(2); },
|
| // Time
|
| a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },
|
| A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },
|
| B: function() { return "Not Yet Supported"; },
|
| g: function() { return this.getHours() % 12 || 12; },
|
| G: function() { return this.getHours(); },
|
| h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); },
|
| H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); },
|
| i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); },
|
| s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); },
|
| // Timezone
|
| e: function() { return "Not Yet Supported"; },
|
| I: function() { return "Not Supported"; },
|
| O: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + '00'; },
|
| T: function() { var m = this.getMonth(); this.setMonth(0); var result = this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, '$1'); this.setMonth(m); return result;},
|
| Z: function() { return -this.getTimezoneOffset() * 60; },
|
| // Full Date/Time
|
| c: function() { return "Not Yet Supported"; },
|
| r: function() { return this.toString(); },
|
| U: function() { return this.getTime() / 1000; }
|
| }; |