Home > Article > Backend Development > Explanation of the principle of time function strtotime() function in PHP
This article introduces to you the principle of the time function strtotime() in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
People often get confused when strtotime is combined with -1 month, 1 month, next month, and then they feel that this function is a bit unreliable and can cause problems at every turn. When using it, it will Very panic...
No, someone just asked me again:
// 今天是2018-07-31 执行代码:date("Y-m-d",strtotime("-1 month"))// 怎么输出是2018-07-01?
Okay, although this question seems confusing, from the internal logic, it is actually "right" "Yes, don't worry, let me explain slowly:
Let's simulate the internal processing logic of date for this kind of thing:
1. First do -1 month, Then the current time is 07-31, and after subtracting one, it is 06-31.
2. Do date normalization again, because there is no 31st in June, so it is as if 2:60 is equal to 3:00, June 31 It’s equal to July 1
Is the logic very "clear"? We can also manually verify the second step, such as:
var_dump(date("Y-m-d", strtotime("2017-06-31")));// 输出2017-07-01
In other words, as long as it involves the last day of the big and small months, there may be this confusion, we also You can easily verify similar other months, confirming this conclusion:
var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));// 输出2017-10-01 var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));// 输出2017-03-03
What should we do?
Starting from PHP5.3, date has added a series of correction phrases to clarify This problem is "first day of" and "last day of", that is, you can limit it so that the date is not automatically "normalized":
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));//输出2017-02-28 var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));////输出2017-09-01 var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));////输出2017-02-01 var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));////输出2017-02-28
So if it is a version before 5.3 (does anyone still use it? ?), you can use mktime or the like to ignore all days, for example, just limit them to the 1st of each month, but it is not as elegant as using first day directly.
Now , now that you understand the internal principles, you won’t panic anymore?
Recommended related articles:
#What are the operations of php array functions? Application of php array function (with code)
The above is the detailed content of Explanation of the principle of time function strtotime() function in PHP. For more information, please follow other related articles on the PHP Chinese website!