Php 两个日期内有多少周
我的数据库(MySQL)中有开始日期和结束日期。 我怎样才能得到答案,在这两个日期内有多少周(或几天)?(mysql或php) 例如,我有这样的数据库: 已开始且将结束Php 两个日期内有多少周,php,mysql,date,Php,Mysql,Date,我的数据库(MySQL)中有开始日期和结束日期。 我怎样才能得到答案,在这两个日期内有多少周(或几天)?(mysql或php) 例如,我有这样的数据库: 已开始且将结束 2009-12-17 | 2009-12-24 2009-12-12 | 2009-12-26 更新问题: 如何使用DATEDIFF? 我怎样才能让它工作?或者我应该完全不同地使用DATEDIFF吗 从my_表中选择DATEDIFF('Started','will_end')作为'Duration',其中id='110' 自M
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26
更新问题:
如何使用DATEDIFF? 我怎样才能让它工作?或者我应该完全不同地使用DATEDIFF吗 从my_表中选择DATEDIFF('Started','will_end')作为'Duration',其中id='110' 自MySQL 4.1.1以来,MySQL有一个返回两个日期之间天数差的函数 请注意,根据手册,
DATEDIFF(expr1,expr2)
返回expr1–expr2
,表示为从一个日期到另一个日期的天数值。expr1和expr2是日期或日期和时间表达式。计算中仅使用值的日期部分。您可以在每个日期使用该函数,然后减去这两个日期,以天为单位计算差值。
找到天数并除以7,如果两列
$d1
和$d2
存储从time()获取的unix时间戳,那么这行代码就足够了:
<?php
$dayDif = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
$numWeeks = $dayDif / 7;
?>
$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)
计算天数并除以七不会给出两个日期之间的周数。相反,当考虑ISO计算中的周数时,它将返回除以7的结果,该结果并不总是对应于两个日期之间的周数
例如,给定start_date=“2010-12-26”
和end_date=“2011-01-25”
您将经历W51,52,01,02,03,04,根据ISO,这是6周,但如果您只需计算差值并除以7,您将得到5
当开始日期和结束日期属于不同年份时,会出现此问题
进行计算的最佳方法是获得开始日期
年份的最后一周编号,该编号应参考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;
}
功能周($ladate2,$ladate3){
$start_week=日期(“W”,标准时间($ladate2));
$end_week=日期(“W”,标准时间($ladate3));
$number_of_weeks=$end_week-$start_week;
$weeks=array();
$weeks[]=$start\u week;
$increment_date=$ladate2;
$i=“1”;
如果($number_of_week)你是指整周吗?例如,从一周内的星期四到下周的星期四实际上不包含整周,但包含7天,因此第二个星期四比第一个星期四晚一周?在处理时间和日期时,请精确说明(没有双关语)这似乎是@jsk重新提出的问题:如果年份不同怎么办?。请注意,程序员在编写函数时应该考虑所有这些假设。不要仅仅根据2-3个示例裁剪可接受的输入…啊,太棒了。unix时间戳方法可以跨年工作。-1,如果存在时间戳,这将失去精度,并且很复杂这是另一个非常合理的方法,可以正确而简单地做到。是的,是的。这非常非常非常非常复杂。这很明显,对吧?不用说…你混淆了“非常非常非常非常复杂”和“比更好的解决方案更复杂”的含义。的确,一天中没有24小时,但急诊室不是吗ror很小吗?