Bug #76634 [Nab]: setISODate sets current time(date is correct)
| From: | bebd75kv6a at p6wsw dot anonbox dot net | Date: | Tue, 17 Jul 2018 07:46:01 +0000 |
| Subject: | Bug #76634 [Nab]: setISODate sets current time(date is correct) | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-216361@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=76634&edit=1
ID: 76634
User updated by: bebd75kv6a at p6wsw dot anonbox dot net
Reported by: bebd75kv6a at p6wsw dot anonbox dot net
Summary: setISODate sets current time(date is correct)
Status: Not a bug
Type: Bug
Package: Date/time related
Operating System: Ubuntu 16
PHP Version: 7.0.30
Block user comment: N
Private report: N
New Comment:
ok
Previous Comments:
------------------------------------------------------------------------
[2018-07-17 01:33:12] a at b dot c dot de
Or use DateTime::setTime() to set the time (same as if you used setDate to set the date).
------------------------------------------------------------------------
[2018-07-17 00:58:38] requinix@php.net
setISODate() is meant to set the date, which is why it should not set the time as well.
Your problem is with the "new DateTime()" portion. That defaults to the current time. If
you want something repeatable then you need to give it a fixed initial date.
https://3v4l.org/6hbDZ
------------------------------------------------------------------------
[2018-07-16 17:51:52] bebd75kv6a at p6wsw dot anonbox dot net
Description:
------------
I found out that setISODate function does not set timestamp as expected. It sets proper date but
time seems to be taken from current timestamp. I know that it is meant to set date but it should set
00:00:00 for time part to ensure repeatable results.
Test script:
---------------
$date='2018-06-29 00:00:00';
$startDate=(new
DateTime())->setISODate(date('Y',strtotime($date)),date('W',strtotime($date)))->format('Y-m-d
H:i:s');
$endDate=(new DateTime())->setISODate(date('Y',strtotime($date)),
date('W',strtotime($date)), 7)->format('Y-m-d H:i:s');
$startTimestamp = (new
DateTime())->setISODate(date('Y',strtotime($date)),date('W',strtotime($date)))->getTimestamp();
echo 'input = '.$date;
echo '<br/>strtotime = '.strtotime($date);
echo '<br/>setISODate->getTimestamp = ';
echo $startTimestamp;
echo '</br>startDate = '.$startDate.'<br/>endDate = '.$endDate;
Expected result:
----------------
input = 2018-06-29 00:00:00
strtotime = 1530244800
setISODate->getTimestamp = 1529899200
startDate = 2018-06-25 00:00:00
endDate = 2018-07-01 00:00:00
Actual result:
--------------
input = 2018-06-29 00:00:00
strtotime = 1530244800
setISODate->getTimestamp = 1529946301
startDate = 2018-06-25 13:05:01
endDate = 2018-07-01 13:05:01
or bit later:
input = 2018-06-29 00:00:00
strtotime = 1530244800
setISODate->getTimestamp = 1529946704
startDate = 2018-06-25 13:11:44
endDate = 2018-07-01 13:11:44
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=76634&edit=1