在不依赖服务器时间的情况下获取全球UTC时间


get global UTC time without relying on server time

我想知道是否可以在不依赖服务器时间(或者在我的情况下,在我的电脑时间)的情况下获得全球UTC时间。

至于现在,如果我做

date('H:i:s')

我得到了我的电脑时间(唯一的变化是我在应用程序中设置的GMT+3或GMT+2),所以如果我将电脑时间更改为2小时23分钟,那么date()函数的结果也将是2小时23分。

不管我自己的电脑手表如何,是否可以一直拉全球UTC时间?

@Cheery在问题评论中提供了一个很好的链接,但截至2014年,使用现代工具是有意义的:

$dt = new DateTime('now', new DateTimeZone('UTC'));
echo $dt->format('d-m-Y H:i:s');

回答你唯一的问题:

不管我自己的电脑手表如何,是否可以一直拉全球UTC时间?

不,php希望您的本地时钟+OS/php时区设置正确。

参考文献:

  • http://php.net/manual/en/datetime.construct.php
  • http://php.net/manual/en/datetime.format.php

您可以使用web服务解决问题,但您必须将Unix时间作为参数。

例如,使用World Weather Online API(无需任何验证;您需要注册并使用API密钥):

<?php
$loc = 'utc'; 
$key = 'xkq544hkar4m69qujdgujn7w';
$url = 'http://api.worldweatheronline.com/free/v1/tz.ashx?format=json&'
       . http_build_query(array('key' => $key, 'q' => $loc,));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); 
$json_response = curl_exec($ch);
curl_close($ch);
$response = json_decode($json_response);
$tz = $response->data->time_zone[0]->localtime;
$timestamp = strtotime($tz);
var_dump($tz);
var_dump( date('H:i', $timestamp) );

此服务不检索秒数(这只是一个示例;您可以选择其他服务),但您可以创建自己的服务:

<?php
date_default_timezone_set('UTC');
header('Content-Type: application/json');
echo json_encode(array('timestamp' => time()));

另一方面,您可以使用网络时间协议:

  • Linux系统管理员指南:基本NTP配置
  • Ubuntu:与NTP的时间同步
  • Mac OS X:将OSX服务器设置为时间服务器
  • Windows:Windows时间服务工具和设置