5

我在 PHP 的文档中看到有两种方法可以将年份值格式化为 4 位数字:

Y - 年份的完整数字表示,4 位数字

o - ISO-8601 年编号。这与 Y 具有相同的值,除了如果 ISO 周数 (W) 属于上一年或下一年,则使用那一年。(在 PHP 5.1.0 中添加)

我研究了更多 ISO-8601 是什么,并且基于 php 的文档,它似乎更“有用”甚至更准确(?)。我认为它更有用,因为它可以防止歧义(例如在处理像 1981-04-05 这样的日期值时)。

但这真的有区别吗?有某种“最佳实践”吗?'o' 是否更慢,这就是为什么人们在没有真正做任何复杂的日期时使用 Y 的原因?

这可能对哪些特定用例有用?

谢谢您的帮助。

编辑:谢谢杰森举个例子!我想我为什么也提出这个问题是我想知道为什么不一直使用'o'?我想我应该一直使用“o”来表示当前未知的未来规范,这将需要我进行更复杂的日期操作。

4

2 回答 2

4

o将在尝试确定当前一周(即日历周)的年份时使用。

Y将用于特定日期的年度输出。

以下代码片段显示了这一点:

date('Y v. o', strtotime('2012-12-31'));  // output: 2012 v. 2013

并不是说它是最佳实践,而是Y常用于输出年份。如前所述,输出此类边界日期o的年份是不正确/令人困惑的。

于 2012-06-11T16:17:16.653 回答
2

ISO 8601一个非常有用的表示日期的标准,但它有几个组件,并非所有组件都可用于多种用途。特别是,“ISO 周”和“ISO 年”可能会有点令人困惑,而且它们通常不是你真正想要使用的(如果你确实想使用它们,你可能已经知道了)。

维基百科有一个很好的解释。基本上,ISO 8601 标准定义了一个单独的日历,而不是分解成月份和月份的几天,而是分解成星期和星期几。

您可能认为这对指定年份没有影响,但有一点问题:日历年开始和结束附近的几周适合哪一年?正如维基百科所说,这不是很直观:“[ISO] 年的第一周是包含 [日历] 年第一个星期四的那一周。”

实际结果:如果您将日期表示为传统的年-月-日值,您不想使用“ISO 年”( o)。一年中的大部分时间你都不会注意到差异,但是当你到了 12 月和 1 月时,你会突然(有时)结束一年的日期。如果你只是用当前日期测试你的系统,你很容易错过这个。

相反,您可能只想使用普通的 old Y-m-d。即使date()文档没有具体说明,这是一个完全有效的 ISO 8601 标准日期。

确实,只有在使用 ISO“星期日期”日历时才应该使用o(这意味着您可能还W用于星期数和N星期几)。

于 2012-06-11T16:32:37.027 回答