从日期字符串中获取 ISO 周日期的更快方法


Quicker way to get date of ISO week from a date string?

我正在传递一个日期字符串(很可能是ISO8601格式),需要将其转换为ISO周的日期,以在MySQL中存储为DATETIME列。要初始化我要保存的日期时间对象,我正在执行以下操作:

$date = new DateTime("now");
$date = new DateTime( $date->format("o-'WW") );
echo $date->format(DateTime::ISO8601) . "'n";

由于我使用的是 Doctrine2,因此我需要向我的实体传递一个 DateTime 对象。有没有办法避免制作 2 个 DateTime 对象以获得相同的结果?我应该回退到 date 函数并将其用作 DateTime 构造函数的参数吗?

$date = new DateTime( date("o-'WW", strtotime("now") );
您可以使用

setISODate通过format()使用对象的周和年来更新第一个DateTime对象:

$date = new DateTime();
$date->setISODate($date->format('o') , $date->format('W'));
echo $date->format(DateTime::ISO8601);
您可以使用

DateTime对象modify()方法。

$date = new DateTime();
$date->modify('sunday this week');
echo $date->format(DateTime::ISO8601) . "'n";

请注意,如果您希望一周的第一天不是星期日,则可能需要执行以下操作。 此示例将星期一视为一周的第一天,因此对于星期日的日期,您需要从前一周获取星期一的日期。

$date = new DateTime();
if ($date->format('D') === 'Sun') {
    $date->modify('monday last week');
} else {
    $date->modify('monday this week');
}
echo $date->format(DateTime::ISO8601) . "'n";

你可以像这样使用日期:

$date = new DateTime( date('o-'WW') );

虽然这种格式看起来有点奇怪。 :p 当然,您也可以使用类必须提供的其他方法/函数来更改/修改日期。