/* Todo Otimizar caulculo de timezone Objeto Date.toString() retorna a data com inserção do offset Objeto Date.getTime() retorna a data sem inserção do offset */ var objTime = DataLayer.dispatch( "timezones" ); Timezone = { daylightSaving: parseInt( objTime.isDaylightSaving ), timezones: objTime.timezones, timezone: function( tzId ){ return this.timezones[ tzId || User.preferences.timezone ]; }, compareTZID: function( fromTZID, toTZID ){ return( this.timezones[ fromTZID ] === this.timezones[ toTZID ] ); }, checkTimezoneCalendar: function(idCalendar, tzId){ return idCalendar && this.compareTZID( DataLayer.get('calendar', idCalendar).timezone, tzId ); }, setDateTimezone: function (date, tzId, idCalendar){ if( !!!tzId || this.checkTimezoneCalendar(idCalendar, tzId) ) return date; var timezone = this.timezone( tzId ); var timezoneOffset = parseInt(timezone.substr(2)) - this.daylightSaving * 100; var timeCurrent = parseInt((date.getTimezoneOffset()/60)+'00') * ( ( timezone.charAt(0) != date.getUTCOffset().charAt(0) )? 1 : -1 ); var times = timezoneOffset + timeCurrent; if(times == 0) return date; else if(times > 0) return date.setTimezoneOffset('-0'+(times)); else return date.setTimezoneOffset('+0'+((times * -1))); }, getDateTimezone: function(date, tzId, recursive){ var timezone = this.timezone( tzId ); if(!timezone) return date; var currentTimezone = parseInt((date.getTimezoneOffset()/60)+'00'); var timezoneOffset = parseInt(timezone.substr(2)) - this.daylightSaving * 100; var times = timezoneOffset - currentTimezone; if(times == 0){ if((timezone.charAt(0) == date.getUTCOffset().charAt(0)) && recursive) return date.setTimezoneOffset( timezone.charAt(0)+'0'+(currentTimezone)); return date; }else if (times > 0) return date.setTimezoneOffset('+0'+(times)); else{ return date.setTimezoneOffset('-0'+((times * -1) + (currentTimezone * 2))); } }, getDateUTC: function (date, tzId){ var timezone = this.timezone( tzId ), currentTimezone = parseInt(timezone.substr(2)) - this.daylightSaving * 100; return(date.setTimezoneOffset(timezone.charAt(0)+'0'+currentTimezone)); }, createDateTimezone: function(date, tzId, idCalendar){ if(this.checkTimezoneCalendar(idCalendar, tzId)) return this.getDateTimezone(date, tzId, true); var times = 0, timezone = this.timezone( tzId ); if(timezone.charAt(0) == '+') times = parseInt(timezone.substr(2)) - parseInt((date.getTimezoneOffset()/60)+'00'); else times = (parseInt(timezone.substr(2)) + parseInt((date.getTimezoneOffset()/60)+'00')) * (-1); if(times == 0) return date.setTimezoneOffset('0000'); else if (times > 0) return date.setTimezoneOffset('+0'+times); else return date.setTimezoneOffset('-0'+(times * -1)); } }