Linux查看系统时间

Linux查看系统时间

引言

日志时间对不上、证书过期误判、定时任务不对点,常常是系统时间不准导致的。运维第一件事就是date看时间、timedatectl看时区,服务器必须用NTP同步,否则业务时间戳全乱。

查看当前时间:date

date

输出年月日、时分秒和时区,最常用。

自定义格式输出

date +"%Y-%m-%d %H:%M:%S"
# 2026-10-21 07:03:00

脚本里取指定格式时间做日志前缀。

查看时间戳

date +%s

输出当前Unix时间戳,排查时间差时用。

查看时区与NTP状态

timedatectl

显示本地时间、UTC、时区、NTP同步是否开启,比date信息全。

硬件时间 vs 系统时间

hwclock --show

读主板RTC硬件时钟,系统时间和硬件时间不一致会导致重启后时间跳变。

手动同步一次

timedatectl set-ntp true
# 或
ntpdate ntp.aliyun.com

开启NTP自动同步,国内用阿里云或ntp.aliyun.com源。

注意事项

  • 云服务器一般已开NTP,别手动硬改时间;
  • 时间跳变会影响日志排序和证书有效期判断;
  • 容器内时间默认跟宿主机,宿主机准了容器就准;
  • 时区不对用timedatectl set-timezone Asia/Shanghai;
  • 不要随便set-time往前拨,数据库主从时间差会出问题;
  • 定时任务执行异常先查系统时间和时区。

总结

date看当前时间、date+%s取时间戳、timedatectl看时区和NTP状态、hwclock看硬件时钟。服务器开启NTP自动同步,时区设Asia/Shanghai,时间不对先查NTP和时区,别手动硬改,时间跳变会影响日志、证书和数据库主从,定时任务异常优先核对系统时间。


emer 发布于  2026-10-21 07:03 

PHP时间戳转日期

PHP时间戳转日期

引言

数据库里常存Unix时间戳(秒级整数),展示到页面要转成可读日期;反过来用户选的日期也要转成时间戳入库。date()和strtotime()是这对基础转换工具,理解格式符和时区才能避免差8小时。

时间戳转日期

$ts = 1760000000;
echo date('Y-m-d H:i:s', $ts);

date()第二个参数缺省就是当前时间time(),传指定时间戳则格式化该时刻。

当前时间戳

echo time();            // 秒级时间戳
echo microtime(true);   // 带微秒的浮点时间戳

日期字符串转时间戳

$ts = strtotime('2026-10-19 08:30:00');
echo $ts;

strtotime支持英文相对表达式:

strtotime('tomorrow');
strtotime('+1 week');
strtotime('next Monday');

DateTime面向对象写法

$dt = new DateTime('@' . $ts);
echo $dt->format('Y-m-d H:i:s');

$d = DateTime::createFromFormat('Y-m-d', '2026-10-19');
echo $d->getTimestamp();

复杂时区和格式解析用DateTime更稳。

常用格式符

  • Y四位年,m两位月,d两位日,H24小时,i分,s秒;
  • 带毫秒用v,星期用D/l,12小时制用g/a。

注意事项

  • 服务器时区不对会差8小时,先date_default_timezone_set('Asia/Shanghai');
  • date()对1970前或2038前后32位系统有边界问题;
  • strtotime解析失败返回false,要判空再用;
  • 毫秒时间戳除以1000再传给date();
  • 跨时区存储建议统一UTC,展示时再转本地;
  • MySQL存int(10)秒级,避免用字符串日期做比较。

总结

时间戳转日期用date('Y-m-d H:i:s', $ts),日期转时间戳用strtotime(),复杂解析用DateTime。先设好Asia/Shanghai时区,毫秒先除以1000,strtotime失败要判空。入库统一存秒级时间戳,展示层再格式化,比存字符串日期更好比较和索引。


emer 发布于  2026-10-19 07:37 
'); })();