2

我有一个oW格式的日期。这是 ISO 8601 格式的 4 位数年份,后跟周数。例如,201301 表示从 2012 年 12 月 31 日星期一开始的一周。

如何将其转换回时间戳。从时间戳到字符串适用于date('oW',$ts). 我该如何倒退?我有兴趣以 oW 格式表示一周中的星期一。如果 PHP 提供了一种单向的方法,但不考虑逆向,那将是非常愚蠢的。

4

1 回答 1

3

ISO 8601 需要以下格式的星期日期:

YYYY\WWW

例如:

2012W52

是 2012 年第 52 周的开始,实际上是 2012/12/24。

要将星期日期转换回时间戳,您可以使用 php 函数strtotime()。代码如下所示:

$oW = '2012W53';
$time = strtotime($oW);
// will output: 2012-12-31T00:00:00+01:00 (I'm in CEST)
echo date('c', $time);

但是,您在上面发布的格式 - 201300 - 无法被strtotime(). 有两个问题:

  • 本周不允许使用 00。周的允许值是从 01 到 53
  • 你错过了中间的“W”。但它属于 ISO 8601 标准。

在我的测试中,我进一步发现,2012W53 指向 2012/12/31 而不是 2013W00(或您可能认为的 W01)

此外,您可以在 php 手册和关于此的Wikipedia 文章中阅读此评论。

于 2012-12-28T17:05:03.180 回答