如何获取PHP中的本地系统时间?

如何获取PHP中的本地系统时间?,php,time,cron,Php,Time,Cron,我正在编写一个PHP系统,我需要获得系统时间。不是GMT时间或特定于时区的时间,而是CRON系统使用的同一系统时间。我有一个CRON作业,每天午夜运行,我想在网页上显示它需要多长时间才能再次运行 例如: 现在我的系统时钟是下午6点。我运行代码: $timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now")); 然而,结果是“3:00”而不是“6:00”。如果我跑 date("H:i", strtoti

我正在编写一个PHP系统,我需要获得系统时间。不是GMT时间或特定于时区的时间,而是CRON系统使用的同一系统时间。我有一个CRON作业,每天午夜运行,我想在网页上显示它需要多长时间才能再次运行

例如: 现在我的系统时钟是下午6点。我运行代码:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now"));
然而,结果是“3:00”而不是“6:00”。如果我跑

date("H:i", strtotime("tomorrow"));
它返回0:00,这是正确的。但如果我跑

date("H:i", strtotime("now"));
它返回21:00,即使正确的值应该是18:00

谢谢。

php将返回系统时间。您可以使用

如果您只想以访客的本地时间显示时间,那么最好使用一点javascript

将为您提供当前系统时间戳

返回自Unix纪元(1970年1月1日00:00:00 GMT)以来以秒为单位测量的当前时间


您可以使用该函数获取运行PHP的服务器的日期/时间——它将返回一个与当前日期时间相对应的时间戳


这是该服务器上的系统时间,与cron使用的时间相同。

如果您想要GMT时间,您可能需要使用
gmtstrftime()
,它将为您提供系统时间,但与GMT相同。如果您在格式化日期之后,则在上有更多信息。

date ('d/m/y h:i:s'); 
如果不提供第二个参数,则无需将time()传递到date,因为它将默认为当前系统时间

有关更多格式选项,请参见此处:

否则,您可以使用

time()

要获得其他人提到的当前unix时间戳,

有许多答案,但在撰写本文时,甚至没有一个答案是正确的

PHP
time()
函数不像大多数人认为的那样返回系统时间,但它返回PHP本地时间,通常在PHP.ini中设置为
date.timezone
,或者在脚本中设置为
date\u default\u timezone\u set()

例如,在我的一台服务器中,PHP时间设置为
Europe/Rome
,系统时间设置为
UTC
。系统时间和PHP时间相差一小时

我将给你一个适用于Linux的解决方案,我不知道适用于Windows。在Linux中,系统时区设置在
/etc/timezone
中。现在,这通常超出了我允许的
open\u basedir
设置,但您可以将
:/etc/timezone
添加到列表中,以便能够读取文件

然后,在想要获取系统时间的脚本之上,可以调用一个库函数,将脚本时区设置为系统时区。我假设此函数是类的一部分,因此我使用静态:

static function setSystemTz() {
    $systemTz = trim(file_get_contents("/etc/timezone"));
    if ($systemTz == 'Etc/UTC') $systemTz = 'UTC';
    date_default_timezone_set($systemTz);
}
更糟糕的是,在PHP5.3.3中,“Etc/UTC”是不可识别的,而“UTC”是不可识别的,所以我必须添加一个if来解决这个问题

现在您可以愉快地调用
time()
,它将真正为您提供系统时间。我已经测试过了,因为我自己需要它,这就是我现在发现这个问题的原因。

试试这个:

$time=date("h:i:s A", strtotime("now"-14));
echo $time;

您可以通过更改上面的数字
14
来调整时间。

要获取系统的当前时间,您需要在php.ini文件中设置正确的
日期.时区。例如,如果你来自印度,你会写:

date.timezone = Asia/Calcutta
对德国来说,这将是:

date.timezone = Europe/Berlin

执行此操作后,
date(“Y-m-dh:i:s”)
将给出您当前的时间。要获取时区信息,请参见。

这是最简单、最简单的方法:

$sys_timestamp = strtotime(exec("date"));
让我们不要试图用php欺骗它,让我们只获取实时系统;)


(适用于任何基于unix的系统)

您可以通过下面的Javascript来设置当前本地时间,并在任何PHP变量中设置它,而不是

    <script>

        // For 24 hours    

        var ct = new Date();
        var hr = ct.getHours();
        var mt = ct.getMinutes();
        if (mt < 10) {
            mt = "0" + mt;
        }
        document.write("<b>" + hr + ":" + mt + " " + "</b>");    


        // For 12 hours (AM / PM)

        var ct = new Date();
        var hr = ct.getHours();
        var mt = ct.getMinutes();

        var ampm = "AM";

        if (hr >= 12) {
            ampm = "PM";
            hr = hr - 12;
        }
        if (hr == 0) {
            hr = 12;
        }
        if (mt < 10) {
            mt = "0" + mt;
        }

        document.write("<b>" + hr + ":" + mt + " " + ampm + "</b>");

   </script>

//24小时
var ct=新日期();
var hr=ct.getHours();
var mt=ct.getMinutes();
如果(mt<10){
mt=“0”+mt;
}
文件。写(“+hr+”:“+mt+”);
//12小时(上午/下午)
var ct=新日期();
var hr=ct.getHours();
var mt=ct.getMinutes();
var ampm=“AM”;
如果(hr>=12){
ampm=“PM”;
hr=hr-12;
}
如果(hr==0){
hr=12;
}
如果(mt<10){
mt=“0”+mt;
}
文件。写(“+hr+”:“+mt+”+ampm+”);

让我试着澄清一下:如果我运行date(“H:I”,time()),它将显示3小时后的时间。正因为如此,strotime(“明天”)-strotime(“现在”)给我的时间比正确的时间少了3个小时。例如,现在是下午6点,cronjob将在上午12点运行,但strotime(“明天”)-strotime(“现在”)返回3小时,因为“明天”是00:00,“现在”是晚上9点。@johnWithoutherms你能用这段代码更新你的帖子吗?用
time()
代替
strotime(“现在”)
用time()代替strotime(“现在”)没有区别,仍然是相同的结果。是的,但是time()不必解析字符串“now”并将其识别为当前时间time()函数为我提供GMT时间;我不想要GMT时间,我想要当前的系统时间。我知道,问题是date()调用给我的是GMT时间,比我的系统时间早3个小时。@JohnWithoutArms,你确定你的服务器系统没有设置为GMT吗?不带参数的Date()应该为您提供系统的当前时间戳,不涉及时区篡改。是的。。。我在Windows机器上进行测试,托盘上的时间确实是我的本地时间,而不是GMT。我认为这可能是Windows的问题,我在Linux服务器上获取了代码,用“top”检查时间(正确,本地时间),运行代码,结果是一样的。我尝试了这个,date(“H:I”,time())返回GMT时间,不是本地系统时间。您确定您的se