我一直试图弄清楚如何使用提供给我服务器的字符串输出两个日期之间的周数。
我发现的每一个与我有同样问题的帖子都是使用我并不十分熟悉的datetime(),我相信它使用的结构与我不同。
无论如何,我无法解决这个问题,而且我已经尝试了几个小时。
这些是我需要输入函数的字符串: 来自:" 8/3/2015" to:" 07/27/2015" 请注意,from字符串将根据每周的星期一每周更改。此外,还有几个To日期,每周都会有一个新日期。
如果它适用,如果它转换为数月和数年也是一个可爱的特征。
UPDATE 这是我想出来的,在phplovers的帮助下回答。这应该会成功地给你回去天数,除非它超过7天,那么它会给你几周,然后几个月,然后几年。
原谅这个混乱。
$from = date_create($startDate);
$to = date_create($endDate);
$interval = date_diff($from, $to);
if( $interval->format("%a") % 7 == 0 ){
$amt = ($interval->format("%a") / 7);
if($amt == 1) {
$display = $amt . " Week";
} else {
if($amt >= 4) {
$amt2 = $interval->format("%m");
if($amt2 == 1) {
$display = $amt2 . " Month";
} else {
$display = $amt2 . " Months";
$amt3 = $interval->format("%y");
if($amt3 == 1) {
$display = $amt3 . " Year";
} else {
$display = $amt3 . " Years";
}
}
} else {
$display = $amt . " Weeks";
}
}
} else {
$display = ($interval->format("%a")) . " Days";
}
您只需在需要时差的任何地方回显$ display。
答案 0 :(得分:2)
我在之前的一些项目中使用了它。希望这对你有帮助。
function datediffInWeeks($date1, $date2)
{
if($date1 > $date2) return datediffInWeeks($date2, $date1);
$first = DateTime::createFromFormat('d/m/Y', $date1);
$second = DateTime::createFromFormat('d/m/Y', $date2);
return floor($first->diff($second)->days/7);
}
var_dump(datediffInWeeks('8/3/2015', '7/27/2015'));
答案 1 :(得分:2)
您需要做的第一件事就是将字符串转换为易于使用的字符串。在进行比较时,Unixtime可能是最简单的。 Unixtime是自Unix Epoch(1970年1月1日)以来的秒数。这就是我要做的事情:
$date_from = strtotime( '8/3/2015' ) // Change to your input
$date_to = strtotime( '07/27/2015' ) // Change to your input
$difference = $date_to - $date_from; // The seconds between these times
$seconds_in_minute = 60;
$seconds_in_hour = $seconds_in_minute * 60;
$seconds_in_day = $seconds_in_hour * 24;
$seconds_in_week = $seconds_in_day * 7;
$seconds_in_month = $seconds_in_day * 30;
$seconds_in_year = $seconds_in_day * 365;
这些变量中的每一个都存储特定时间范围内的秒数。你可以做的是使用一些基本的数学方法再次检查这些变量。
$years = floor( $difference / $seconds_in_year );
$months = floor( ($difference - $years * $seconds_in_year ) / ( $seconds_in_month ) );
$days = floor( ( $difference - $years * $seconds_in_year - $months * $seconds_in_month ) / ( $seconds_in_day ) );
这是PHP中date_diff()
函数中发生的事情的长形式示例。但是,该功能仅在PHP 5.3之后可用,因此如果您使用的是旧版本的PHP,则可以尝试使用此方法。
答案 2 :(得分:1)
正如MrT所说,使用date()函数可以轻松实现:
$from = date_create("07/27/2015");
$to = date_create("08/03/2015");
$interval = date_diff($from, $to);
echo $interval->format("%a"); // %a will give difference in days
有关格式化的更多信息,请查看date_diff()
答案 3 :(得分:1)
访问:http://php.net/manual/en/datetime.diff.php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
答案 4 :(得分:1)
这个东西有一个很棒的PHP扩展。它叫做碳。
具体来说,对于您的给定任务,您可以执行以下操作(我正在跳过导入和填充的代码):
$dt = Carbon::create(2014, 1, 1);
$dt2 = Carbon::create(2014, 12, 31);
echo $dt->diffInWeeks($dt2);
上述功能会给你答案。
此外,您可以使用他们的createFromFormat()
方法创建日期的碳对象
答案 5 :(得分:1)
'W'日期格式获取日期所在的一周中的一周。
$from = date('W', strtotime('07/27/2015') ) ;
$to = date('W', strtotime('8/3/2015') ) ;
//$from and $to now have the week of the year that their dates fall in.
//This simple math produces the the number of weeks from one date to the next.
$numOfWeeks = $to - $from;