从日期字符串中获取ISO周日期的更快捷方式?

时间:2013-10-25 15:43:56

标签: php datetime

我正在传递日期字符串(很可能是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") );

3 个答案:

答案 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当然,您也可以使用该类提供的其他方法/功能来更改/修改日期。