英文:
Why i cant retrieve the date from database
问题
I want to calculate the days between two dates and the dates are being retrieved from the database. Below is what I have done:
if($model->save()){
$date1 = strtotime($startDate);
$date2 = strtotime($endDate);
$days = ($date2 - $date1);
$Days = ($days/(60*60*24));
$model->no_of_days = $Days;
$model->save();
}
$startDate and $endDate are being retrieved from the database. When I code it like this, the result is 0.
But when I replace it with a date, for example, '2020-10-10' and '2020-10-13', the result is 3.
My format for the date from the database is the same as the replaced date. Can someone guide me and explain to me what is wrong with my code?
英文:
Okay first of all, I have checked many questions on stackoverflow and those questions doesn't seems to solve my problem. Before some of you might put this question into a duplicate question, Can I have any explanation whats wrong with my code.
I want to calculate the days between two dates and the dates is being retrieved from database.
Below is what I have done
if($model->save()){
$date1 = strtotime($startDate);
$date2 = strtotime($endDate);
$days = ($date2 - $date1);
$Days = ($days/(60*60*24));
$model->no_of_days= $Days;
$model->save();
}
$startDate and $endDate are being retrieved from the database. When I code it like this, the result is 0.
but, when I replace it with a date, for example, '2020-10-10' and '2020-10-13', the result is 3.
My format for the date from the database is the same like the replaced date. Can someone guide me and explain to me.
What is wrong with my code?
答案1
得分: 2
步骤一: 我建议避免使用 days 和 Days 作为变量。
步骤二: 使用原生的 var_dump 函数验证 $startDate 和 $endDate 的内容。
var_dump($startDate);
var_dump($endDate);
如果从数据库获取的数据是 'good',那么您应该得到正确的结果。因此,我们认为您的 $startDate 和 $endDate 没有被正确初始化。
$date1 = strtotime('2020-10-10');
$date2 = strtotime('2020-10-13');
$days = ($date2 - $date1);
var_dump($days); // 返回 259200
$days = ($days / (60 * 60 * 24));
var_dump($days); // 返回 3
您的代码应该是这样的:
if($model->save()){
$date1 = strtotime($startDate);
$date2 = strtotime($endDate);
$days = ($date2 - $date1);
$days = ($days / (60 * 60 * 24));
$model->no_of_days = $days;
$model->save();
}
步骤三: 我认为您应该查看 DatetimeInterval 类或 date_diff 函数。
英文:
Step One: I suggest to avoid using daysand Daysas variables.
Step Two: Verify the content of $startDate and $endDateby dumping them with the native var_dump function.
var_dump($startDate);
var_dump($endDate);
If data from your database are 'good', you should have the correct result. So we think that your $startDate and $endDate are not well initialized.
$date1 = strtotime('2020-10-10');
$date2 = strtotime('2020-10-13');
$days = ($date2 - $date1);
var_dump($days); //returns 259200
$days = ($days/(60*60*24));
var_dump($days); //returns 3
You code should be:
if($model->save()){
$date1 = strtotime($startDate);
$date2 = strtotime($endDate);
$days = ($date2 - $date1);
$days = ($days/(60*60*24));
$model->no_of_days= $days;
$model->save();
}
Step3:
I think you should have a look on DatetimeInterval class or date_diff function.
答案2
得分: 1
根据您说的,如果替换日期的格式与数据库中的日期格式相同,您可以尝试使用以下方式:
注意:您正在使用$days和$Days变量。可以使用一个单独的$days变量来存储日期差异的结果,并可以将该变量用于保存到数据库中。我已将$Days更改为$days。
if($model->save()){
// 计算时间戳之间的差异
$days = strtotime($endDate) - strtotime($startDate);
// 1天 = 24小时
// 24 * 60 * 60 = 86400秒
$days = abs(round($days/ 86400));
$model->no_of_days = $days;
$model->save();
}
英文:
As you said,if the format of the replaced date is same as that of the date from the database you can try using the following:
Note : you are using $days and $Days variable. Use can use a single $days variable to store the date difference result and can use that variable for saving into database. I have changed using $Days into $days.
if($model->save()){
// Calulating the difference in timestamps
$days = strtotime($endDate) - strtotime($startDate);
// 1 day = 24 hours
// 24 * 60 * 60 = 86400 seconds
$days= abs(round($days/ 86400));
$model->no_of_days= $days;
$model->save();
}
答案3
得分: 0
使用date_diff
$date1 = date_create($startDate);
$date2 = date_create($endDate);
$diff = date_diff($date1, $date2);
echo $diff->format("%R%a");
如果你传递正确的$startDate和$endDate,它应该正常工作。
希望这对你有帮助。
英文:
Use date_diff
$date1=date_create($startDate);
$date2=date_create($endDate);
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a");
If you pass correct $startDate and $endDate it should works correct.
Hope this help to you.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论