• php时间转换,从a时区转换到b时区


    <?php
    /**
     * Created by PhpStorm.
     * User: lxd
     * Date: 2019/1/9
     * Time: 13:25
     * Comm:
     */
    
    class DtFormat
    {
        protected $dt;
        protected $ttz; //目标时区
        protected static $instance;
    
        private function __construct( $ftz, $ttz )
        {
            if( !$ftz || !$ftz instanceof DateTimeZone )
                $ftz        = new DateTimeZone( date_default_timezone_get() ); //默认来源时区
    
            if( !$ttz || !$ttz instanceof  DateTimeZone )
                $this->ttz  = new DateTimeZone( C('PARTNER_TIME_ZONE') ); //默认输出时区
            else
                $this->ttz  = $ttz;
    
            $this->dt   = new DateTime( 'now', $ftz );
        }
    
        /**
         * author liuxiaodong
         * date 2019/1/11 15:19
         * @param null $ftz 来源时区
         * @param null $ttz 目标时区
         * @return DtFormat
         */
        public static function getInstance( $ftz = null, $ttz = null )
        {
            if( !$ftz && !$ttz )
                $key    = '0';
            else {
                $ftz_key    = $ftz instanceof DateTimeZone ? $ftz->getName() : null;
                $ttz_key    = $ttz instanceof DateTimeZone ? $ttz->getName() : null;
                $key        = md5( $ftz_key . $ttz_key );
            }
            if( !self::$instance[$key] instanceof self ) {
                self::$instance[$key]     = new self( $ftz, $ttz );
            }
    
            return self::$instance[$key];
        }
    
        public function show( $original, $formart = 'Y-m-d H:i:s' )
        {
            //将时间转成时间戳
            $new_original       = @($original + 0);
            if (strlen($new_original) != strlen($original)) {
                $new_original   = strtotime($original);
                if (!$new_original)
                    return $original;
            }
    
            /**
             * notice
             * 时区不一致,同一个时间转换成时间戳是不一样的 !!
             *  $str    = '2018-09-26 07:23:31';
                var_dump( date_default_timezone_get() ); //UTC
                var_dump( strtotime( $str ) ); //1537946611
    
                date_default_timezone_set( 'PRC' );
                var_dump( strtotime( $str ) ); //1537917811
             *
             */
            $datetime       = null;
            if( $this->dt->getTimezone()->getName() == date_default_timezone_get() ) {
                $datetime   = clone $this->dt;
                $datetime   = $datetime->setTimestamp($new_original);
            }else {
                $tmpDt      = new DateTime();
                $tmpDt->setTimestamp( $new_original );
    $datetime = DateTime::createFromFormat( 'Y-m-d H:i:s', $tmpDt->format( 'Y-m-d H:i:s' ), $datetime->getTimezone() );
     } $datetime->setTimezone($this->ttz); return $datetime->format( $formart ); } }

     调用: 

    try{
                $timestr         = '2018-10-10 12:00:00';
                $ftimezone       = new DateTimeZone( 'UTC' );
                $ttimezone       = new DateTimeZone( 'PRC' );
                $newtm           = DtFormat::getInstance( $ftimezone, $ttimezone )->show( $timestr );
                echo(  "old = {$timestr}; new = {$newtm}" );
            }catch ( Exception $e ) {
                //error
            }

    结果:  old = 2018-10-10 12:00:00; new = 2018-10-10 20:00:00

  • 相关阅读:
    关于mui的主页面、子页面、页面跳转
    设计图片反复闪,点击后停止(设计定时器)
    购物车+支付宝
    登陆判读,并跳转到指定页面(window.location.href='http://localhost/index.html')
    template.js遍历对象的写法
    jqurey的跨域使用getjson(http://www.jb51.net/Special/894.htm)
    安装sass并ruby更改淘宝镜像
    Y君面试记
    MapReduce 阅读笔记
    安全感
  • 原文地址:https://www.cnblogs.com/lxdd/p/10256269.html
Copyright © 2020-2023  润新知