|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #61366 DateInterval should support weeks and days combined
Submitted: 2012-03-12 21:53 UTC Modified: 2021-10-28 16:20 UTC
Avg. Score:4.0 ± 0.8
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: evert at rooftopsolutions dot nl Assigned: cmb (profile)
Status: Closed Package: Date/time related
PHP Version: 5.3.10 OS: Any
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: evert at rooftopsolutions dot nl
New email:
PHP Version: OS:


 [2012-03-12 21:53 UTC] evert at rooftopsolutions dot nl
The DateInterval should support specifying weeks and days at the same time.

This is documented to not be supported, but this is imho silly and confusing.

Test script:

$di = new DateIterval('P1W1D');
echo $di->d;


Expected result:

Actual result:


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2012-03-13 01:09 UTC]
-Package: date_time +Package: Date/time related
 [2012-03-14 01:51 UTC] uramihsayibok at gmail dot com
ISO 8601 doesn't allow mixing weeks with anything else.

If you need both then just do the math: 7 * weeks + days
 [2012-03-14 09:19 UTC] evert at rooftopsolutions dot nl
Well, I have several counter points:

1) If it's not supported, it should throw an exception. At the moment it fails silently.
2) There's no reason to support a superset of ISO 8601
3) I'm using this because I'm implementing an iCalendar parser. The DURATION property type is based on ISO 8601:

In the wild I'm finding duration values with mixed weeks and days. Now I need to pre-parse this string, do weeks * 7, then regenerate the (almost identical) string before I can add it to the constructor.

I feel adding support for W and D at the same time does not pose additional confusion, and is a sensible feature.
 [2012-03-14 10:08 UTC]
It should not be as part of "d", but rather as part of "days". I can quite easily add this for just weeks and days, but putting months etc in the mix is not going to work. In any case, ->days is the only computed property, the rest are as parsed.
 [2012-03-14 10:16 UTC] evert at rooftopsolutions dot nl
But it appears that currently both P1W and P1D individually get parsed into the 'd' property.

Wouldn't it make more sense to retain this behaviour when both are supplied, but just add them up?

In a sense ->d itself is also a computed property, as this is weeks * 7 for P1W. There is no ->w property.
 [2013-09-27 17:08 UTC] krewecherl at gmx dot net
It could not be a part of "days", because "days" is only available when using 

IMHO, silently ignoring part of the input is the worst of all possible solutions. 
"P1W1D" is not a valid ISO-8601 duration, so this should throw an Exception. 
Alternatively, PHP could be extra helpful and allow mixed input like that. But 
just ignoring the weeks is definitely not good.
 [2021-10-28 16:20 UTC]
-Status: Open +Status: Closed -Assigned To: +Assigned To: cmb
 [2021-10-28 16:20 UTC]
Mixed weeks and days are supported as of PHP 8.0.0[1].

[1] <>
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Jun 17 11:01:31 2024 UTC