当前位置: 首页>>代码示例>>PHP>>正文


PHP DateTimeZone::getTransitions方法代码示例

本文整理汇总了PHP中DateTimeZone::getTransitions方法的典型用法代码示例。如果您正苦于以下问题:PHP DateTimeZone::getTransitions方法的具体用法?PHP DateTimeZone::getTransitions怎么用?PHP DateTimeZone::getTransitions使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在DateTimeZone的用法示例。


在下文中一共展示了DateTimeZone::getTransitions方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: getTimezoneData

 private static function getTimezoneData($timezone_identifier)
 {
     // I'm very shame of that code but now i cannot create something better due
     // php hasn't a smart API (even after they have
     // rewrote datetime functions).
     // Here we should find the offset  for the provided timezone and determine
     // whether the timezone has the DST offset ever.
     // We cannot use date("I") due it depends on current time (if the current time
     // is in winter, we 'll skip the zone)
     // so the best safe (but not fast) practice is to scan all tz transitions
     $timezone = new DateTimeZone($timezone_identifier);
     $current_date = new DateTime("now", $timezone);
     $current_ts = strtotime($current_date->format(DATE_W3C));
     $data = array("offset" => 0, "dst" => false);
     $transitions = $timezone->getTransitions();
     foreach ($transitions as &$transition) {
         $tt = new DateTime($transition['time'], $timezone);
         $ts = strtotime($tt->format(DATE_W3C));
         if ($ts < $current_ts) {
             continue;
         }
         if (!$transition['isdst']) {
             $transition = next($transitions);
         }
         $data['dst'] = $transition['isdst'];
         $data['offset'] = self::makeOffset($transition);
         break;
     }
     return $data;
 }
开发者ID:phoebius,项目名称:proof-of-concept,代码行数:30,代码来源:TimezoneUtils.class.php

示例2: DateTimeZone

    function render_field($field)
    {
        /*
         *  Create a select dropdown with all available timezones
         */
        $utc = new DateTimeZone('UTC');
        $dt = new DateTime('now', $utc);
        ?>
        <select name="<?php 
        echo esc_attr($field['name']);
        ?>
">
            <?php 
        foreach (\DateTimeZone::listIdentifiers() as $tz) {
            $current_tz = new \DateTimeZone($tz);
            $transition = $current_tz->getTransitions($dt->getTimestamp(), $dt->getTimestamp());
            $abbr = $transition[0]['abbr'];
            $is_selected = trim($field['value']) === trim($tz) ? ' selected="selected"' : '';
            ?>
                <option value="<?php 
            echo $tz;
            ?>
"<?php 
            echo $is_selected;
            ?>
><?php 
            echo $tz . ' (' . $abbr . ')';
            ?>
</option>
            <?php 
        }
        ?>
        </select>
    <?php 
    }
开发者ID:Ricardo-Diaz,项目名称:acf-timezone-picker,代码行数:35,代码来源:acf-timezone_picker-v5.php

示例3: actionGeneralSettings

 /**
  * Shows the general settings form.
  *
  * @param array $variables
  */
 public function actionGeneralSettings(array $variables = array())
 {
     if (empty($variables['info'])) {
         $variables['info'] = Craft::getInfo();
     }
     // Assemble the timezone options array
     // (Technique adapted from http://stackoverflow.com/a/7022536/1688568)
     $variables['timezoneOptions'] = array();
     $utc = new DateTime();
     $offsets = array();
     $timezoneIds = array();
     $includedAbbrs = array();
     foreach (\DateTimeZone::listIdentifiers() as $timezoneId) {
         $timezone = new \DateTimeZone($timezoneId);
         $transition = $timezone->getTransitions($utc->getTimestamp(), $utc->getTimestamp());
         $abbr = $transition[0]['abbr'];
         $offset = round($timezone->getOffset($utc) / 60);
         if ($offset) {
             $hour = floor($offset / 60);
             $minutes = floor(abs($offset) % 60);
             $format = sprintf('%+d', $hour);
             if ($minutes) {
                 $format .= ':' . sprintf('%02u', $minutes);
             }
         } else {
             $format = '';
         }
         $offsets[] = $offset;
         $timezoneIds[] = $timezoneId;
         $includedAbbrs[] = $abbr;
         $variables['timezoneOptions'][$timezoneId] = 'UTC' . $format . ($abbr != 'UTC' ? " ({$abbr})" : '') . ($timezoneId != 'UTC' ? ' - ' . $timezoneId : '');
     }
     array_multisort($offsets, $timezoneIds, $variables['timezoneOptions']);
     $this->renderTemplate('settings/general/index', $variables);
 }
开发者ID:kentonquatman,项目名称:portfolio,代码行数:40,代码来源:SystemSettingsController.php

示例4: tzdata

 /**
 		Return additional information for specified Unix timezone
 			@return array
 			@param $id string
 			@private
 	**/
 private static function tzdata($id)
 {
     $ref = new DateTimeZone($id);
     $loc = $ref->getLocation();
     $now = time();
     $trn = $ref->getTransitions($now, $now);
     return array('offset' => $ref->getOffset(new DateTime('now', new DateTimeZone('GMT'))) / 3600, 'country' => $loc['country_code'], 'latitude' => $loc['latitude'], 'longitude' => $loc['longitude'], 'dst' => $trn[0]['isdst']);
 }
开发者ID:huckfinnaafb,项目名称:leviatha,代码行数:14,代码来源:geo.php

示例5: tzinfo

 /**
  *	Return information about specified Unix time zone
  *	@return array
  *	@param $zone string
  **/
 function tzinfo($zone)
 {
     $ref = new \DateTimeZone($zone);
     $loc = $ref->getLocation();
     $trn = $ref->getTransitions($now = time(), $now);
     $out = array('offset' => $ref->getOffset(new \DateTime('now', new \DateTimeZone('GMT'))) / 3600, 'country' => $loc['country_code'], 'latitude' => $loc['latitude'], 'longitude' => $loc['longitude'], 'dst' => $trn[0]['isdst']);
     unset($ref);
     return $out;
 }
开发者ID:mm999,项目名称:selfoss,代码行数:14,代码来源:geo.php

示例6: timezoneDoesDST

function timezoneDoesDST($tzId, $time = "")
{
    $tz = new DateTimeZone($tzId);
    $date = new DateTime($time != "" ? $time : "now", $tz);
    $trans = $tz->getTransitions();
    foreach ($trans as $k => $t) {
        if ($t["ts"] > $date->format('U')) {
            return $trans[$k - 1]['isdst'];
        }
    }
}
开发者ID:seoduda,项目名称:Patua,代码行数:11,代码来源:ical_event.php

示例7: setTimezone

 /**
  * Verifies that the given timezone exists and sets the timezone to the selected timezone
  *
  * @TODO Verify that the given timezone exists
  *
  * @param string $timezoneName
  * @return string
  */
 public function setTimezone($timeZoneName = 'UTC')
 {
     if (!$this->isValidTimeZone($timeZoneName)) {
         $timeZoneName = 'UTC';
     }
     $this->timezone = new \DateTimeZone($timeZoneName);
     $this->timezoneId = $this->timezone->getName();
     $transitions = $this->timezone->getTransitions();
     $this->timezoneInDST = $transitions[0]['isdst'];
     return $this->timezoneId;
 }
开发者ID:unreal4u,项目名称:localization,代码行数:19,代码来源:localization.php

示例8: timezoneExhibitsDST

 protected function timezoneExhibitsDST($tzId)
 {
     $tz = new \DateTimeZone($tzId);
     $date = new \DateTime("now", $tz);
     $trans = $tz->getTransitions();
     foreach ($trans as $k => $t) {
         if ($t["ts"] > $date->format('U')) {
             return $trans[$k - 1]['isdst'];
         }
     }
     return false;
 }
开发者ID:Maksold,项目名称:platform,代码行数:12,代码来源:UTCTimeTypeTest.php

示例9: __construct

 /**
  * Creates a new component.
  *
  * By default this object will iterate over its own children, but this can 
  * be overridden with the iterator argument
  * 
  * @param string $name 
  * @param Sabre\VObject\ElementList $iterator
  */
 public function __construct()
 {
     parent::__construct();
     $tz = new \DateTimeZone(\GO::user() ? \GO::user()->timezone : date_default_timezone_get());
     //$tz = new \DateTimeZone("Europe/Amsterdam");
     $transitions = $tz->getTransitions();
     $start_of_year = mktime(0, 0, 0, 1, 1);
     $to = \GO\Base\Util\Date::get_timezone_offset(time());
     if ($to < 0) {
         if (strlen($to) == 2) {
             $to = '-0' . $to * -1;
         }
     } else {
         if (strlen($to) == 1) {
             $to = '0' . $to;
         }
         $to = '+' . $to;
     }
     $STANDARD_TZOFFSETFROM = $STANDARD_TZOFFSETTO = $DAYLIGHT_TZOFFSETFROM = $DAYLIGHT_TZOFFSETTO = $to;
     $STANDARD_RRULE = '';
     $DAYLIGHT_RRULE = '';
     for ($i = 0, $max = count($transitions); $i < $max; $i++) {
         if ($transitions[$i]['ts'] > $start_of_year) {
             $weekday1 = $this->_getDay($transitions[$i]['time']);
             $weekday2 = $this->_getDay($transitions[$i + 1]['time']);
             if ($transitions[$i]['isdst']) {
                 $dst_start = $transitions[$i];
                 $dst_end = $transitions[$i + 1];
             } else {
                 $dst_end = $transitions[$i];
                 $dst_start = $transitions[$i + 1];
             }
             $STANDARD_TZOFFSETFROM = $this->_formatVtimezoneTransitionHour($dst_start['offset'] / 3600);
             $STANDARD_TZOFFSETTO = $this->_formatVtimezoneTransitionHour($dst_end['offset'] / 3600);
             $DAYLIGHT_TZOFFSETFROM = $this->_formatVtimezoneTransitionHour($dst_end['offset'] / 3600);
             $DAYLIGHT_TZOFFSETTO = $this->_formatVtimezoneTransitionHour($dst_start['offset'] / 3600);
             $DAYLIGHT_RRULE = "FREQ=YEARLY;BYDAY={$weekday1};BYMONTH=" . date('n', $dst_start['ts']);
             $STANDARD_RRULE = "FREQ=YEARLY;BYDAY={$weekday2};BYMONTH=" . date('n', $dst_end['ts']);
             break;
         }
     }
     $this->tzid = $tz->getName();
     //	$this->add("last-modified", "19870101T000000Z");
     $rrule = new \Sabre\VObject\Recur\RRuleIterator($STANDARD_RRULE, new \DateTime('1970-01-01 ' . substr($STANDARD_TZOFFSETFROM, 1) . ':00'));
     $rrule->next();
     $rrule->next();
     $this->add($this->createComponent("standard", array('dtstart' => $rrule->current()->format('Ymd\\THis'), 'rrule' => $STANDARD_RRULE, 'tzoffsetfrom' => $STANDARD_TZOFFSETFROM . "00", 'tzoffsetto' => $STANDARD_TZOFFSETTO . "00")));
     $rrule = new \Sabre\VObject\Recur\RRuleIterator($DAYLIGHT_RRULE, new \DateTime('1970-01-01 ' . substr($DAYLIGHT_TZOFFSETFROM, 1) . ':00'));
     $rrule->next();
     $rrule->next();
     $this->add($this->createComponent("daylight", array('dtstart' => $rrule->current()->format('Ymd\\THis'), 'rrule' => $DAYLIGHT_RRULE, 'tzoffsetfrom' => $DAYLIGHT_TZOFFSETFROM . "00", 'tzoffsetto' => $DAYLIGHT_TZOFFSETTO . "00")));
 }
开发者ID:ajaboa,项目名称:crmpuan,代码行数:61,代码来源:VTimezone.php

示例10: getInfo

 public static function getInfo()
 {
     static $tz_info;
     if (!$tz_info) {
         $tz = Customization::get('timezone');
         $utc = new \DateTimeZone('UTC');
         $dt = new \DateTime('now', $utc);
         $current_tz = new \DateTimeZone($tz);
         $offset = $current_tz->getOffset($dt);
         $transition = $current_tz->getTransitions($dt->getTimestamp(), $dt->getTimestamp());
         $dt_in_tz = new \DateTime('now', $current_tz);
         $tz_info = array('code' => $tz, 'gmt_offset_seconds' => (double) $offset, 'gmt_offset_hours' => (double) ($offset / 3600), 'name' => $transition[0]['name'], 'abbr' => $transition[0]['abbr'], 'tz_object' => $current_tz, 'utc_object' => $utc, 'now_utc' => $dt, 'now' => $dt_in_tz);
     }
     return $tz_info;
 }
开发者ID:einstein95,项目名称:FAOpen,代码行数:15,代码来源:Timezone.php

示例11: getTimezonesAsArray

 /** Returns an associative array with all the timezones as keys and a friendly description of each of them as values */
 public static function getTimezonesAsArray()
 {
     $utc = new \DateTimeZone('UTC');
     $dt = new \DateTime('now', $utc);
     $result = array();
     foreach (\DateTimeZone::listIdentifiers() as $tz) {
         $current_tz = new \DateTimeZone($tz);
         $offset = $current_tz->getOffset($dt);
         $transition = $current_tz->getTransitions($dt->getTimestamp(), $dt->getTimestamp());
         $abbr = $transition[0]['abbr'];
         $formatted = sprintf('%+03d:%02u', floor($offset / 3600), floor(abs($offset) % 3600 / 60));
         $result[$tz] = "{$tz} [ {$abbr} {$formatted} ]";
     }
     return $result;
 }
开发者ID:kisorbiswal,项目名称:Creamy,代码行数:16,代码来源:CRMUtils.php

示例12: day_of

function day_of($time, $tzid=NULL) {
  $tztime = $time - ($time % 86400);
  if ($tzid !== NULL) {
    $timezone = new DateTimeZone($tzid);
    $transitions = $timezone->getTransitions();
    $is_dst = date('I', $tztime);
    $offset = 0;

    foreach ($transitions as $transition) {
      if ($transition['isdst'] == $is_dst) {
	$offset = $transition['offset'];
	break;
      }
    }

    $tztime = $tztime - $offset;
    if ($tztime > $time)
      $tztime -= 86400;
  }
  return $tztime;
}
开发者ID:jamespaulmuir,项目名称:MIT-Mobile-Framework,代码行数:21,代码来源:datetime_lib.php

示例13: vtimezone

 private function vtimezone($icalEvents)
 {
     $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
     $tzid = "";
     if (is_callable("date_default_timezone_set")) {
         $current_timezone = date_default_timezone_get();
         // Do the Timezone definition
         $tzid = ";TZID={$current_timezone}";
         // find the earliest start date
         $firststart = false;
         foreach ($icalEvents as $a) {
             if (!$firststart || $a->getUnixStartTime() < $firststart) {
                 $firststart = $a->getUnixStartTime();
             }
         }
         // Subtract 1 leap year to make sure we have enough transitions
         $firststart -= 31622400;
         $timezone = new DateTimeZone($current_timezone);
         if (version_compare(PHP_VERSION, "5.3.0") >= 0) {
             $transitions = $timezone->getTransitions($firststart);
         } else {
             $transitions = $timezone->getTransitions();
         }
         $tzindex = 0;
         while (JevDate::strtotime($transitions[$tzindex]['time']) < $firststart) {
             $tzindex++;
         }
         $transitions = array_slice($transitions, $tzindex);
         if (count($transitions) >= 2) {
             $lastyear = $params->get("com_latestyear", 2020);
             echo "BEGIN:VTIMEZONE\n";
             echo "TZID:{$current_timezone}\n";
             for ($t = 0; $t < count($transitions); $t++) {
                 $transition = $transitions[$t];
                 if ($transition['isdst'] == 0) {
                     if (JevDate::strftime("%Y", $transition['ts']) > $lastyear) {
                         continue;
                     }
                     echo "BEGIN:STANDARD\n";
                     echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transition['ts']);
                     if ($t < count($transitions) - 1) {
                         echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transitions[$t + 1]['ts']);
                     }
                     // if its the first transition then assume the old setting is the same as the next otherwise use the previous value
                     $prev = $t;
                     $prev += $t == 0 ? 1 : -1;
                     $offset = $transitions[$prev]["offset"];
                     $sign = $offset >= 0 ? "+" : "-";
                     $offset = abs($offset);
                     $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60);
                     echo "TZOFFSETFROM:{$offset}\n";
                     $offset = $transitions[$t]["offset"];
                     $sign = $offset >= 0 ? "" : "-";
                     $offset = abs($offset);
                     $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60);
                     echo "TZOFFSETTO:{$offset}\n";
                     echo "TZNAME:{$current_timezone} " . $transitions[$t]["abbr"] . "\n";
                     echo "END:STANDARD\n";
                 }
             }
             for ($t = 0; $t < count($transitions); $t++) {
                 $transition = $transitions[$t];
                 if ($transition['isdst'] == 1) {
                     if (JevDate::strftime("%Y", $transition['ts']) > $lastyear) {
                         continue;
                     }
                     echo "BEGIN:DAYLIGHT\n";
                     echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transition['ts']);
                     if ($t < count($transitions) - 1) {
                         echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transitions[$t + 1]['ts']);
                     }
                     // if its the first transition then assume the old setting is the same as the next otherwise use the previous value
                     $prev = $t;
                     $prev += $t == 0 ? 1 : -1;
                     $offset = $transitions[$prev]["offset"];
                     $sign = $offset >= 0 ? "+" : "-";
                     $offset = abs($offset);
                     $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60);
                     echo "TZOFFSETFROM:{$offset}\n";
                     $offset = $transitions[$t]["offset"];
                     $sign = $offset >= 0 ? "" : "-";
                     $offset = abs($offset);
                     $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60);
                     echo "TZOFFSETTO:{$offset}\n";
                     echo "TZNAME:{$current_timezone} " . $transitions[$t]["abbr"] . "\n";
                     echo "END:DAYLIGHT\n";
                 }
             }
             echo "END:VTIMEZONE\n";
         }
     }
     return $tzid;
 }
开发者ID:poorgeek,项目名称:JEvents,代码行数:93,代码来源:icals.php

示例14: _getTZOffsetTransitions

    /**
     * Retrieve transitions for offsets of given timezone
     *
     * @param string $timezone
     * @param mixed $from
     * @param mixed $to
     * @return array
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    protected function _getTZOffsetTransitions($timezone, $from = null, $to = null)
    {
        $tzTransitions = [];
        try {
            if (!empty($from)) {
                $from = $from instanceof \DateTime
                    ? $from->getTimestamp()
                    : (new \DateTime($from))->getTimestamp();
            }

            $to = $to instanceof \DateTime
                ? $to
                : new \DateTime($to);
            $nextPeriod = $this->getConnection()->formatDate(
                $to->format('Y-m-d H:i:s')
            );
            $to = $to->getTimestamp();

            $dtz = new \DateTimeZone($timezone);
            $transitions = $dtz->getTransitions();

            for ($i = count($transitions) - 1; $i >= 0; $i--) {
                $tr = $transitions[$i];
                try {
                    $this->timezoneValidator->validate($tr['ts'], $to);
                } catch (\Magento\Framework\Exception\ValidatorException $e) {
                    continue;
                }

                $tr['time'] = $this->getConnection()->formatDate(
                    (new \DateTime($tr['time']))->format('Y-m-d H:i:s')
                );
                $tzTransitions[$tr['offset']][] = ['from' => $tr['time'], 'to' => $nextPeriod];

                if (!empty($from) && $tr['ts'] < $from) {
                    break;
                }
                $nextPeriod = $tr['time'];
            }
        } catch (\Exception $e) {
            $this->_logger->critical($e);
        }

        return $tzTransitions;
    }
开发者ID:razbakov,项目名称:magento2,代码行数:54,代码来源:AbstractReport.php

示例15: DateTimeZone

var_dump(timezone_name_get($tz));
// Create two timezone objects, one for Taipei (Taiwan) and one for
// Tokyo (Japan)
$dateTimeZoneTaipei = timezone_open("Asia/Taipei");
$dateTimeZoneJapan = timezone_open("Asia/Tokyo");
// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeTaipei = date_create("2008-08-08", $dateTimeZoneTaipei);
$dateTimeJapan = date_create("2008-08-08", $dateTimeZoneJapan);
var_dump(date_offset_get($dateTimeTaipei));
var_dump(date_offset_get($dateTimeJapan));
$tz = timezone_open("Asia/Shanghai");
var_dump(timezone_name_get($tz));
$timezone = timezone_open("CET");
$transitions = timezone_transitions_get($timezone);
var_dump($transitions[0]['ts']);
var_dump($transitions[0]['offset']);
var_dump($transitions[0]['isdst']);
var_dump($transitions[0]['abbr']);
$tz = timezone_open("EDT");
var_dump(timezone_name_get($tz));
$tz = timezone_open("PST");
var_dump(timezone_name_get($tz));
$tz = timezone_open("CHAST");
var_dump(timezone_name_get($tz));
var_dump((bool) timezone_version_get());
$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions(1000000, 999999999);
var_dump($transitions[0]);
var_dump($transitions[3]);
var_dump($transitions[count($transitions) - 1]);
开发者ID:gangjun911,项目名称:hhvm,代码行数:31,代码来源:date_timezone.php


注:本文中的DateTimeZone::getTransitions方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。