在PHP中从Internet获取日期和时间

时间:2018-01-02 05:48:11

标签: javascript php ajax html5

我知道在这里多次询问这类相关问题。但我没有找到我实际搜索的解决方案。

所以这是我的问题,如何从互联网(而不是从本地计算机)获取日期?

在我的项目中,我有一个邮件通知模块。所以即使节点(本地计算机)的日期和时间发生变化,我也需要适当的日期。该程序必须与正确的日期进行比较。所以我需要知道如何从互联网上获取日期或者给我任何其他解决方案以获得正确的日期和时间,即使计算机的日期和时间发生了变化。

3 个答案:

答案 0 :(得分:2)

如果你想获得时间默认时区而不是那样使用

echo $date = date('m/d/Y h:i:s a', time());

如果您想设置时区而不是使用" date_default_timezone_set(' your_time_zone'); "

date_default_timezone_set('Australia/Melbourne');
echo $date = date('m/d/Y h:i:s a', time());

List TimeZone

答案 1 :(得分:0)

调用互联网上提供的免费API并获取时间。

我找到的最简单的是http://www.convert-unix-time.com/api。您可以通过http://www.convert-unix-time.com/api?timestamp=now&timezone=vienna获取维也纳的当前时间戳。

他们也有PHP示例。

$timestamp = time();
$returnType = 'php';
$timezone = 'Vienna';
$requestUri = sprintf('http://www.convert-unix-time.com/api?timestamp=%s&timezone=%s&returnType=%s',
    $timestamp, $timezone, $returnType);

$response = file_get_contents($requestUri);
$result = unserialize($response);
var_dump($result);

另一个示例API是http://www.geonames.org/export/web-services.html#timezone

http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo的调用将返回以下内容。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<geonames>
    <timezone tzversion="tzdata2017c">
    <countryCode>AT</countryCode>
    <countryName>Austria</countryName>
    <lat>47.01</lat>
    <lng>10.2</lng>
    <timezoneId>Europe/Vienna</timezoneId>
    <dstOffset>2.0</dstOffset>
    <gmtOffset>1.0</gmtOffset>
    <rawOffset>1.0</rawOffset>
    <time>2018-01-02 06:57</time>
<sunrise>2018-01-02 08:05</sunrise>
<sunset>2018-01-02 16:41</sunset>
</timezone>
</geonames>

答案 2 :(得分:0)

date_default_timezone_set(" **PLACE NEEDED TIMEZONE HERE**");

/* Query a time server (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at     qrq.de> */
function query_time_server ($timeserver, $socket)
{
    $fp = fsockopen($timeserver,$socket,$err,$errstr,5);
    # parameters: server, socket, error code, error text, timeout
    if($fp)
    {
        fputs($fp, "\n");
        $timevalue = fread($fp, 49);
        fclose($fp); # close the connection
    }
    else
    {
        $timevalue = " ";
    }

    $ret = array();
    $ret[] = $timevalue;
    $ret[] = $err;     # error code
    $ret[] = $errstr;  # error text
    return($ret);
}

function getCurrentDate($format = "d/m/Y H:i:s"){
    $timeserver = "ntp.pads.ufrj.br";
    $timercvd = query_time_server($timeserver, 37);
//if no error from query_time_server
    if(!$timercvd[1]) {
        $timevalue = bin2hex($timercvd[0]);
        $timevalue = abs(HexDec('7fffffff') - HexDec($timevalue) - HexDec('7fffffff'));
        $tmestamp = $timevalue - 2208988800; # convert to UNIX epoch time stamp
        return date($format, $tmestamp);
    }
    return null;
}

echo getCurrentDate();