public function __construct(EntityBlueprint $blueprint, $timezone_offset = NULL)
 {
     $this->blueprint = $blueprint;
     /*
     // Init timezone offsets
     */
     if (!empty($timezone_offset)) {
         $this->timezone_offset_select = $timezone_offset;
         $this->timezone_offset_modify = $timezone_offset;
     } else {
         // timezone_offset_select
         $this->timezone_offset_select = BPTimezone::getOffset();
         // timezone_offset_modify
         // DO NOT USE User Session's or BPConfig timezone preference for INSERT/UPDATE
         // php's date() function will return datetimes in (php) systems timezone regardless of users Session or BPConfig
         // To modify DATETIME's in the users timezone of preference (e.g. when visitor inputs a time using UI)
         // client code should either (1) explicitly construct EntityDAO with $timezone_offset param
         // or (2) manually create/convert DATETIMES (in php) in the users preferred timezone
         $timezone_offset_modify = BPTimezone::getOffsetForTimezone(date_default_timezone_get());
         if (!empty($timezone_offset_modify)) {
             $this->timezone_offset_modify = $timezone_offset_modify;
         } else {
             $this->timezone_offset_modify = BPTimezone::UTC;
         }
     }
 }
 public static function getOffset()
 {
     $tag = "BPTimezone::getOffset()";
     $session_timezone = Session::user("_TIMEZONE");
     // Overrides Session::user("_TIMEZONE_OFFSET")
     $session_timezone_offset = Session::user("_TIMEZONE_OFFSET");
     $config_timezone = isset(BPConfig::$timezone) ? BPConfig::$timezone : "";
     // Overrides $timezone_offset
     $config_timezone_offset = isset(BPConfig::$timezone_offset) ? BPConfig::$timezone_offset : 0;
     $default_timezone = date_default_timezone_get();
     if (!empty($session_timezone)) {
         $offset = BPTimezone::getOffsetForTimezone($session_timezone);
         Log::debug("{$tag}: Returning offset from Session::user(_TIMEZONE): {$offset}");
         return $offset;
     } else {
         if (!empty($session_timezone_offset)) {
             Log::debug("{$tag}: Returning offset from Session::user(_TIMEZONE_OFFSET) {$session_timezone_offset}");
             return $session_timezone_offset;
         } else {
             if (!empty($config_timezone)) {
                 $offset = BPTimezone::getOffsetForTimezone($config_timezone);
                 Log::debug("{$tag}: Returning offset from BPConfig::timezone: {$offset}");
                 return $offset;
             } else {
                 if (!empty($config_timezone_offset)) {
                     Log::debug("{$tag}: Returning offset from BPConfig::timezone_offset {$config_timezone_offset}");
                     return $config_timezone_offset;
                 } else {
                     if (!empty($default_timezone)) {
                         $offset = BPTimezone::getOffsetForTimezone($default_timezone);
                         Log::debug("{$tag}: Returning offset from default timezone: {$offset}");
                         return $offset;
                     } else {
                         Log::debug("{$tag}: Returning offset for UTC:" . BPTimezone::UTC);
                         return BPTimezone::UTC;
                     }
                 }
             }
         }
     }
 }