0

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

$date = new DateTime("now");
$date = new DateTime( $date->format("o-\WW") );

echo $date->format(DateTime::ISO8601) . "\n";

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

$date = new DateTime( date("o-\WW", strtotime("now") );
4

3 回答 3

2

您可以通过以下方式使用对象的周和年setISODate更新第一个对象:DateTimeformat()

$date = new DateTime();
$date->setISODate($date->format('o') , $date->format('W'));
echo $date->format(DateTime::ISO8601);
于 2013-10-25T16:17:36.653 回答
1

您可以使用对象modify()的方法DateTime

$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";
于 2013-10-25T15:58:06.377 回答
-1

您可能可以像这样使用日期:

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

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

于 2013-10-25T15:56:30.427 回答