局域网内获取其他机器时间戳及PHP获取指定机器时间戳问询
局域网时间戳获取与PHP查询方案
问题1:如何在局域网内的其他机器上获取时间戳?
咱们分不同操作系统场景来解决,方法都很直接:
Windows环境
- 先用
net time命令拉取目标机器的时间字符串:
输出大概是net time \\192.168.0.2\\192.168.0.2 的当前时间是 2024/5/20 14:30:00这样的格式。 - 转换成Unix时间戳的话,用PowerShell一步到位最方便:
执行后直接输出标准Unix时间戳。(Get-Date (net time \\192.168.0.2 | Select-String -Pattern '\d{4}/\d{1,2}/\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}').Matches.Value).ToUniversalTime() - (Get-Date "1970-01-01").TotalSeconds
Linux/Unix环境
- 用
rdate命令获取目标机器时间:rdate -p 192.168.0.2 - 直接转成时间戳,搭配
date命令就行:date -d "$(rdate -p 192.168.0.2)" +%s
跨平台通用方法(无需依赖系统命令)
很多系统默认开启了13端口的Daytime服务,咱们可以直接用TCP连接获取时间:
telnet 192.168.0.2 13
返回的格式类似20 MAY 2024 14:35:00 GMT,拿到这个字符串后,不管用什么语言都能轻松转成时间戳。
问题2:通过cmd命令net time 192.168.0.2 /set /y完成时间同步后,如何在本机使用PHP获取192.168.0.2的时间戳?
这里要注意:net time /set只是一次性同步本机和目标机器的时间,之后目标机器时间变动的话,本机不会自动跟着更新。所以如果要实时拿到目标机器的当前时间戳,不能直接用PHP的time()(那是本机时间),得主动去查目标机器,给你三个靠谱方案:
方案1:PHP调用系统命令解析net time输出
只要PHP的shell_exec没被禁用,且当前用户有权访问目标机器,就能这么干:
<?php // 执行net time命令拉取目标机器时间 $rawOutput = shell_exec('net time \\192.168.0.2'); // 用正则匹配时间字符串 preg_match('/\d{4}\/\d{1,2}\/\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}/', $rawOutput, $timeMatches); if (!empty($timeMatches[0])) { // 转成Unix时间戳,注意时区要和目标机器一致 $targetTimestamp = strtotime($timeMatches[0]); echo "目标机器当前时间戳:{$targetTimestamp}"; } else { echo "获取失败,请检查网络连接或权限设置"; } ?>
方案2:PHP通过TCP连接13端口获取时间
这个方法不依赖系统命令,只要目标机器开了13端口的Daytime服务就可以:
<?php $targetHost = '192.168.0.2'; $daytimePort = 13; // 建立TCP连接,超时5秒 $socket = fsockopen($targetHost, $daytimePort, $errorNo, $errorMsg, 5); if ($socket) { // 读取返回的时间字符串 $timeString = trim(fgets($socket)); fclose($socket); // 转成时间戳 $targetTimestamp = strtotime($timeString); echo "目标机器当前时间戳:{$targetTimestamp}"; } else { echo "连接失败:{$errorMsg}(错误码:{$errorNo})"; } ?>
方案3:目标机器提供Web接口(最灵活)
如果目标机器也跑了Web服务,可以在上面写个超简单的PHP文件get_timestamp.php:
<?php // 直接输出当前时间戳 echo time(); ?>
然后本机PHP直接请求这个接口:
<?php // 用file_get_contents或者curl都行 $targetTimestamp = file_get_contents('http://192.168.0.2/get_timestamp.php'); echo "目标机器当前时间戳:{$targetTimestamp}"; ?>
这个方法的好处是不用管系统权限和端口,只要能访问Web服务就行。
内容的提问来源于stack exchange,提问作者OptimisticSeeEverything
相关产品推荐
相关产品推荐

