如何在PHP/Laravel/JS中直接获取Windows系统本地时间无需修改时区
Windows环境下无需修改时区直接获取本地系统时间实现方案
PHP 实现(Windows服务器端)
无需修改php.ini中的date.timezone配置,通过Windows内置的WMI接口直接读取系统本地时间,仅需提前开启PHP的COM扩展:
// 初始化WMI连接 $wmi = new COM('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2'); // 查询系统本地时间 $timeResult = $wmi->ExecQuery("SELECT * FROM Win32_LocalTime"); foreach ($timeResult as $item) { $systemLocalTime = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $item->Year, $item->Month, $item->Day, $item->Hour, $item->Minute, $item->Second ); } echo $systemLocalTime;
该方法获取的时间直接和Windows系统时间同步服务的结果对齐,完全不受PHP时区配置影响。
JS 实现
分两种运行场景提供方案:
浏览器端(用户本地Windows设备运行)
浏览器端JS的Date对象默认直接读取宿主系统(当前Windows设备)的本地时间,无需任何时区调整配置:const localDate = new Date(); // 示例格式化输出 YYYY-MM-DD HH:mm:ss const formattedTime = `${localDate.getFullYear()}-${String(localDate.getMonth() + 1).padStart(2, '0')}-${String(localDate.getDate()).padStart(2, '0')} ${String(localDate.getHours()).padStart(2, '0')}:${String(localDate.getMinutes()).padStart(2, '0')}:${String(localDate.getSeconds()).padStart(2, '0')}`; console.log(formattedTime);Node.js端(Windows服务器运行)
调用Windows原生系统命令读取本地时间,无需修改Node.js运行时的时区设置:const { execSync } = require('child_process'); // 调用wmic命令获取系统时间 const cmdResult = execSync('wmic os get LocalDateTime /value').toString().trim(); const timeMatch = cmdResult.match(/LocalDateTime=(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/); const systemLocalTime = `${timeMatch[1]}-${timeMatch[2]}-${timeMatch[3]} ${timeMatch[4]}:${timeMatch[5]}:${timeMatch[6]}`; console.log(systemLocalTime);
内容的提问来源于stack exchange,提问作者Luiz Santa
相关产品推荐
相关产品推荐

