当前位置: 首页> 最新文章列表> 利用 localtime() 结合 strftime() 函数,轻松实现多样化时间格式化

利用 localtime() 结合 strftime() 函数,轻松实现多样化时间格式化

gitbox 2025-09-04

在 PHP 中,时间和日期的处理是开发中常见的需求,尤其是在日志记录、数据显示、文件命名等场景中,格式化时间往往是一个不容忽视的任务。PHP 提供了许多函数来帮助开发者进行时间的格式化,其中 localtime()strftime() 函数的组合,能够让你轻松实现多样化的时间格式化需求。

一、localtime() 函数概述

localtime() 是一个用于获取本地时间的函数。它返回一个数组,包含了本地时间的各个组成部分,包括年份、月份、日子、小时、分钟、秒等。该函数返回的时间信息是基于当前时间戳的,可以通过指定参数来获取指定时间戳对应的本地时间信息。

<span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">localtime</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$time</span></span><span>);
</span></span>

返回的数组结构如下:

<span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; 秒
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; 分钟
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; 小时
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; 一周的第几天 (</span><span><span class="hljs-number">0</span></span><span>=星期日, </span><span><span class="hljs-number">1</span></span><span>=星期一...)
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; 月份 (</span><span><span class="hljs-number">0</span></span><span>=</span><span><span class="hljs-number">1</span></span><span>月, </span><span><span class="hljs-number">11</span></span><span>=</span><span><span class="hljs-number">12</span></span><span>月)
    [</span><span><span class="hljs-meta">5</span></span><span>] =&gt; 年份 (从</span><span><span class="hljs-number">1900</span></span><span>年开始的年数)
    [</span><span><span class="hljs-meta">6</span></span><span>] =&gt; 一年中的第几天 (</span><span><span class="hljs-number">1</span></span><span>到</span><span><span class="hljs-number">366</span></span><span>)
    [</span><span><span class="hljs-meta">7</span></span><span>] =&gt; 夏令时标志 (</span><span><span class="hljs-number">0</span></span><span>=否, </span><span><span class="hljs-number">1</span></span><span>=是)
)
</span></span>

通过对该数组的访问,我们可以精确地获取不同部分的时间信息,例如小时、分钟、月份等。

二、strftime() 函数概述

strftime() 函数用于根据指定的格式化字符串来格式化时间。它接受两个参数,第一个是格式化字符串,第二个是一个可选的时间戳参数,如果不提供,则默认为当前时间。

<span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-variable">$format</span></span><span>);
</span></span>

常用的格式化字符包括:

  • %Y:四位数的年份(例如:2025)

  • %m:两位数的月份(01到12)

  • %d:两位数的日期(01到31)

  • %H:两位数的小时(00到23)

  • %M:两位数的分钟(00到59)

  • %S:两位数的秒数(00到59)

通过这种方式,我们可以将时间转化为自己所需要的格式。

三、localtime() 和 strftime() 结合使用

结合 localtime()strftime() 函数,我们可以实现灵活多样的时间格式化。首先,使用 localtime() 获取当前本地时间的数组,然后将数组转换为时间戳,并利用 strftime() 来进行格式化输出。

<span><span><span class="hljs-comment">// 获取当前时间的本地时间信息</span></span><span>
</span><span><span class="hljs-variable">$localTime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">localtime</span></span><span>();

</span><span><span class="hljs-comment">// 构造一个时间戳</span></span><span>
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mktime</span></span><span>(
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>],   // 小时
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>],   // 分钟
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>],   // 秒
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">4</span></span><span>] + </span><span><span class="hljs-number">1</span></span><span>, // 月份(需要加</span><span><span class="hljs-number">1</span></span><span>,因为数组从</span><span><span class="hljs-number">0</span></span><span>开始)
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">3</span></span><span>] + </span><span><span class="hljs-number">1</span></span><span>, // 日期(同理需要加</span><span><span class="hljs-number">1</span></span><span>)
    </span><span><span class="hljs-variable">$localTime</span></span><span>[</span><span><span class="hljs-number">5</span></span><span>] + </span><span><span class="hljs-number">1900</span></span><span> // 年份(需要加</span><span><span class="hljs-number">1900</span></span><span>)
);

</span><span><span class="hljs-comment">// 使用 strftime 格式化时间</span></span><span>
</span><span><span class="hljs-variable">$format</span></span><span> = </span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-variable">$format</span></span><span>, </span><span><span class="hljs-variable">$timestamp</span></span><span>);
</span></span>

上述代码首先通过 localtime() 获取当前的本地时间信息,然后构造了一个有效的时间戳,最后使用 strftime() 格式化并输出时间。

四、常见应用场景

  1. 日志文件时间戳:

    在日志记录系统中,我们常常需要为每条日志添加时间戳,并且格式要求很高。使用 localtime()strftime() 函数,可以根据需求生成多种时间格式的时间戳。

    <span><span><span class="hljs-variable">$logTime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"日志时间: <span class="hljs-subst">$logTime</span></span></span><span>\n";
    </span></span>
  2. 自定义日期格式:

    在某些应用场景中,日期格式可能需要根据地区或用户需求进行自定义。通过 strftime(),可以轻松实现各种日期格式,比如 "2025年07月13日" 或 "2025-07-13 14:35:20"。

    <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y年%m月%d日"</span></span><span>, </span><span><span class="hljs-variable">$timestamp</span></span><span>);  </span><span><span class="hljs-comment">// 输出 "2025年07月13日"</span></span><span>
    </span></span>
  3. 动态生成文件名:

    在文件命名中,使用时间戳作为文件名的一部分,可以确保文件名的唯一性。例如:日志_2025-07-13_14-35-20.txt

    <span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">"日志_"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y-%m-%d_%H-%M-%S"</span></span><span>, </span><span><span class="hljs-variable">$timestamp</span></span><span>) . </span><span><span class="hljs-string">".txt"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件名: <span class="hljs-subst">$filename</span></span></span><span>\n";
    </span></span>

五、总结

通过结合 localtime()strftime() 函数,PHP 开发者能够更加灵活地处理时间和日期,生成符合特定格式的时间字符串。无论是在日志记录、文件命名还是动态显示日期,掌握这两个函数的使用将极大提高开发效率和代码的可读性。