我正在传递一个日期字符串(很可能是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 当然,您也可以使用类必须提供的其他方法/函数来更改/修改日期。