首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP和系统日期是不同的

PHP和系统日期是不同的
EN

Stack Overflow用户
提问于 2015-11-03 16:37:46
回答 4查看 3K关注 0票数 4

我在系统和PHP之间得到了不同的日期/时间。

系统

代码语言:javascript
运行
复制
        $ date
        Tue Nov  3 19:16:51 EAT 2015

代码语言:javascript
运行
复制
        echo date("D M j G:i:s T Y");
        -> Tue Nov 3 16:16:23 UTC 2015

尽管系统有不同的时区,PHP仍然默认为UTC。如何使PHP选择系统日期/时间?

注意:出于维护原因,我正在避免对时区进行硬编码.

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2015-11-04 00:05:34

在PHP中获取系统日期/时间似乎没有简单(与系统无关)的方法,但这似乎有效:

代码语言:javascript
运行
复制
    $timezone = 'UTC';
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
         $timezone = exec('tzutil /g');
    } else {
            $timezone = exec('date +%Z');
    }

    $localTimezone = new DateTimeZone($timezone);
    $myDateTime = new DateTime(date(), $localTimezone);
    echo ($myDateTime->format('D M j G:i:s T Y') );

我还没有在Windows上进行测试,但是在Linux上它可以工作。

票数 1
EN

Stack Overflow用户

发布于 2015-11-04 02:23:03

理想情况下,您应该配置每个服务器的php.ini,其中可以设置date.timezone

代码语言:javascript
运行
复制
; ...

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'America/Chicago'

; ...

可以在PHP手册中找到可接受时区的列表。

如果您希望在每个脚本上设置它,下面是一个独立于平台的函数来设置它:

代码语言:javascript
运行
复制
<?php
function setTimezone($OSXPassword = null){

    $timezone = null;
    switch(true){
        //Linux (Tested on Ubuntu 14.04)
        case(file_exists('/etc/timezone')):
            $timezone = file_get_contents('/etc/timezone');
            $timezone = trim($timezone); //Remove an extra newline char.
            break;

        //Windows (Untested) (Thanks @Mugoma J. Okomba!)
        case(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'):
            $timezone = exec('tzutil /g');
            break;

        //OSX (Tested on OSX 10.11 - El Capitan)
        case(file_exists('/usr/sbin/systemsetup')):
            if(!isset($OSXPassword)){
                $OSXPassword = readline('**WARNING your input will appear on screen!**  Password for sudo: ');
            }
            $timezone = exec("echo '" . $OSXPassword ."' | sudo -S systemsetup -gettimezone");
            $timezone = substr($timezone, 11);
            break;
    }

    if(empty($timezone)){
        trigger_error('setTimezone could not determine your timezone', E_USER_ERROR);
    } else {
        date_default_timezone_set($timezone);
    }

    return $timezone;
}

setTimezone();
?>

如您所知,对OSX的支持是粗略的。

在OSX上获得时区的唯一合适方法是通过systemsetup,这需要超级用户才能运行。我真的不喜欢在PHP脚本中存储root密码的做法,但我包含了完整性选项--谨慎使用,这是一个安全漏洞。在OSX上,如果没有提供root密码,脚本将尝试从用户输入获取密码。

票数 1
EN

Stack Overflow用户

发布于 2015-11-04 00:23:24

在您的文件顶部尝试此输入。

代码语言:javascript
运行
复制
date_default_timezone_set('Country');

示例:

date_default_timezone_set('Hongkong');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33504467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档