我正在传递日期字符串(很可能是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") );
答案 0 :(得分:2)
您可以使用setISODate
通过DateTime
使用对象的周和年来更新第一个format()
对象:
$date = new DateTime();
$date->setISODate($date->format('o') , $date->format('W'));
echo $date->format(DateTime::ISO8601);
答案 1 :(得分: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";
答案 2 :(得分:-1)
您可以像这样使用date:
$date = new DateTime( date('o-\WW') );
虽然这种格式看起来有点奇怪。 :p当然,您也可以使用该类提供的其他方法/功能来更改/修改日期。