|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2012-12-11 15:18 UTC] salmanarshad2000 at yahoo dot com
Description:
------------
Weeks start on Sunday or Monday. However, in this regard:
1) strtotime behavior is not documented.
2) strtotime produces inconsistent results when "this week" is used.
Sample dates from month of December 2012 used the the test script:
Mon 2012-12-03
Tue 2012-12-04
Wed 2012-12-05
Thu 2012-12-06
Fri 2012-12-07
Sat 2012-12-08
Sun 2012-12-09
Mon 2012-12-10
Tue 2012-12-11
Wed 2012-12-12
Thu 2012-12-13
Fri 2012-12-14
Sat 2012-12-15
Sun 2012-12-16
Test script:
---------------
// function strtotime called on Sun 2012-12-09
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-09"))); // Mon 2012-12-10
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-09"))); // Sun 2012-12-16
// function strtotime called on Mon 2012-12-10
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-10"))); // Mon 2012-12-10
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-10"))); // Sun 2012-12-16
Expected result:
----------------
If Sunday is start of the week then "sunday this week" be less than "monday this week":
// function strtotime called on Sun 2012-12-09
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-09"))); // Mon 2012-12-10
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-09"))); // Sun 2012-12-09
// function strtotime called on Mon 2012-12-10
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-10"))); // Mon 2012-12-10
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-10"))); // Sun 2012-12-09
If Monday is start of the week then "monday this week" should return different values on sunday and monday:
// function strtotime called on Sun 2012-12-09
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-09"))); // Mon 2012-12-03
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-09"))); // Sun 2012-12-09
// function strtotime called on Mon 2012-12-10
echo date("D Y-m-d", strtotime("monday this week", strtotime("2012-12-10"))); // Mon 2012-12-10
echo date("D Y-m-d", strtotime("sunday this week", strtotime("2012-12-10"))); // Sun 2012-12-16
Actual result:
--------------
See test script, actual result is present alongside each line.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 09:00:01 2025 UTC |
The latter part which explains that "Sunday this week" is evaluated as (i) this week (ii) very next sunday is well explained and understandable. The former part which mentions that "time argument of strtotime() such as this week [is interpreted as] a week period of Monday through Sunday" is still confusing. It does return a Monday but does it return the correct Monday? /* when today is */ /* this week is */ /* Mon 2012-12-03 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-03"))); /* Mon 2012-12-03 */ /* Tue 2012-12-04 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-04"))); /* Mon 2012-12-03 */ /* Wed 2012-12-05 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-05"))); /* Mon 2012-12-03 */ /* Thu 2012-12-06 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-06"))); /* Mon 2012-12-03 */ /* Fri 2012-12-07 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-07"))); /* Mon 2012-12-03 */ /* Sat 2012-12-08 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-08"))); /* Mon 2012-12-03 */ /* Sun 2012-12-09 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-09"))); /* Mon 2012-12-10 */ /* Mon 2012-12-10 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-10"))); /* Mon 2012-12-10 */ /* Tue 2012-12-11 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-11"))); /* Mon 2012-12-10 */ /* Wed 2012-12-12 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-12"))); /* Mon 2012-12-10 */ /* Thu 2012-12-13 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-13"))); /* Mon 2012-12-10 */ /* Fri 2012-12-14 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-14"))); /* Mon 2012-12-10 */ /* Sat 2012-12-15 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-15"))); /* Mon 2012-12-10 */ /* Sun 2012-12-16 */ echo date("D Y-m-d", strtotime("this week", strtotime("2012-12-16"))); /* Mon 2012-12-17 */ You can see that the output changes on Sundays, not Mondays. Expected: "this week" on Sun 2012-12-09 should return the week starting Mon 2012-12-03 (ending on Sun 2012-12-09 inclusive) "this week" on Sun 2012-12-16 should return the week starting Mon 2012-12-10 (ending on Sun 2012-12-16 inclusive) Actual: this week on Sun 2012-12-09 returns the week starting _coming_ Mon 2012-12-10 this week on Sun 2012-12-16 returns the week starting _coming_ Mon 2012-12-17This is a rather horrible bug, bumping for pressure. Another test sample: (date)->modify('Monday this week') 2015-07-06: 2015-07-06 // Mo - Mo 2015-07-07: 2015-07-06 // Tu - Mo 2015-07-08: 2015-07-06 // We - Mo 2015-07-09: 2015-07-06 // Th - Mo 2015-07-10: 2015-07-06 // Fr - Mo 2015-07-11: 2015-07-06 // Sa - Mo 2015-07-12: 2015-07-13 // Su - Mo next week???!!!similar problem ... when get actual week first and last day. first day is: strtotime('this week last monday') last day is: strtotime('this week next sunday') is coming back to the next week on sunday, so have to strtotime('this week last monday + 6 days')Hello, I'm surprised the behavior of strtotime. Today Sunday, September 11, 2016: date ( 'd.m.Y', strtotime ('Saturday this week')); // 05.09.2016 instead of 09.10.2016 date ( 'd.m.Y', strtotime ('Friday this week')); // 05.09.2016 instead of 09.09.2016