我的数据库(MySQL)中有开始日期和结束日期。 我怎样才能得到答案,这2个日期里面有多少周(或几天)? (mysql或php)
例如,我有这种数据库:
开始和| will_end
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26
...
更新问题:
如何使用DATEDIFF?
我怎样才能使这个工作?或者我应该以完全不同的方式使用DATEDIFF?
SELECT DATEDIFF('Started','will_end')AS'持续时间'FROM my_table WHERE id ='110';
答案 0 :(得分:2)
如果两列$d1
和$d2
存储从time()
获得的unix时间戳,则此简单行就足够了:
$diffweek = abs($d1 - $d2) / 604800;
否则,如果列是DATETIME类型,则:
$diffweek = abs(strtotime($d1) - strtotime($d2)) / 604800;
p / s:604800是一周内的秒数(60 * 60 * 24 * 7)
p / s2:您可能想要intval($diffweek)
或round($diffweek)
答案 1 :(得分:2)
计算天数除以7将不会给出两个日期之间的周数。相反,当根据ISO计算中的周数进行思考时,它将返回除以7的结果,该结果并不总是与两个日期之间的周数相对应。
例如,给定start_date = "2010-12-26"
和end_date = "2011-01-25"
,您将通过W51,52,01,02,03,04,这些是ISO的6周,但如果您只是计算差异除以7,你就得到5。
当开始日期和结束日期属于不同年份时,会出现此问题。
进行计算的最佳方法是获取start_date
年的上周数字,并且应该参考12月28日。
function weeks($ladate2,$ladate3) {
$start_week= date("W",strtotime($ladate2));
$end_week= date("W",strtotime($ladate3));
$number_of_weeks= $end_week - $start_week;
$weeks=array();
$weeks[]=$start_week;
$increment_date=$ladate2;
$i="1";
if ($number_of_weeks<0){
$start_year=date("Y",strtotime($ladate2));
$last_week_of_year= date("W",strtotime("$start_year-12-28"));
$number_of_weeks=($last_week_of_year-$start_week)+$end_week;
}
while ($i<=$number_of_weeks)
{
$increment_date=date("Y-m-d", strtotime($ladate2. " +$i week"));
$weeks[]=date("W",strtotime($increment_date));
$i=$i+1;
}
return $weeks;
}
function diff_weeks($ladate2,$ladate3) {
$weeks=weeks($ladate2,$ladate3);
$diff_weeks=count($weeks);
return $diff_weeks;
}
祝你好运, Manikam
答案 2 :(得分:1)
MySQL有datediff,它返回两个日期之间的天数差异,自MySQL 4.1.1。
请注意,根据手册,DATEDIFF(expr1,expr2)
会将expr1 – expr2
表示为从一个日期到另一个日期的天数值。 expr1和expr2是日期或日期和时间表达式。 在计算中仅使用值的日期部分。
答案 3 :(得分:1)
您可以在每个日期使用TO_DAYS功能,并减去两个以计算天数差异。
答案 4 :(得分:0)
找出天数并除以7
答案 5 :(得分:-2)
<?php
$dayDif = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
$numWeeks = $dayDif / 7;
?>
php的日期函数的z选项为您提供一年中的某一天(0 - 365)。通过减去这两个值,您可以找到日期之间的天数。然后将因子数乘以七。
仔细阅读本页,日期()功能丰富。 http://php.net/manual/en/function.date.php