求算法(重叠时间段)

huakaihualuolemon 2011-11-17 02:35:42
StartTime EndTime
11.01 11.11
11.02 11.08
11.03 11.15
11.06 11.09
11.13 11.18
11.20 11.25
总时间段为
StartTime EndTime
11.01 11.02
11.02 11.11
11.11 11.13
11.13 11.15
11.15 11.18
11.18 11.20
11.20 11.25
...全文
475 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tottyandbaty 2011-11-18
  • 打赏
  • 举报
回复
曾经做过类似的,是这样计算的。原是代码不是下面的,下面的是经过改动的



<?

function calculate_days($from,$to)
{

for($days=strtotime($from);$days<=strtotime($to);$days+=3600*24)
{
$day[]=date("Y-m-d",$days);
}
return $day;
}

$from1="2011-10-9";
$to1="2011-11-4";

$from2="2011-10-23";
$to2="2012-3-22";




print_r(array_intersect(calculate_days($from1,$to1),calculate_days($from2,$to2)));

/*
Array
(
[14] => 2011-10-23
[15] => 2011-10-24
[16] => 2011-10-25
[17] => 2011-10-26
[18] => 2011-10-27
[19] => 2011-10-28
[20] => 2011-10-29
[21] => 2011-10-30
[22] => 2011-10-31
[23] => 2011-11-01
[24] => 2011-11-02
[25] => 2011-11-03
[26] => 2011-11-04
)


*/
?>
huakaihualuolemon 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foolbirdflyfirst 的回复:]
引用 6 楼 huakaihualuolemon 的回复:

引用 5 楼 foolbirdflyfirst 的回复:

StartTime EndTime
11.01 11.11
11.02 11.08
======================
如果只有这两条数据,得到
11.01 ~ 11.02
11.02 ~ 11.11
两条,这个还算明白


StartTi……
[/Quote]
但是1-11里包含2了啊
foolbirdflyfirst 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huakaihualuolemon 的回复:]

引用 5 楼 foolbirdflyfirst 的回复:

StartTime EndTime
11.01 11.11
11.02 11.08
======================
如果只有这两条数据,得到
11.01 ~ 11.02
11.02 ~ 11.11
两条,这个还算明白


StartTime EndTime
11.01 11.11
11.02 1……
[/Quote]
所以得仔细确定你的算法
我怎么觉得这三段周期,重叠时间段是3 - 11这一段呢
因为3 - 15 根本没包涵2号这一天。
huakaihualuolemon 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tottyandbaty 的回复:]
曾经做过类似的,是这样计算的。原是代码不是下面的,下面的是经过改动的


PHP code



<?

function calculate_days($from,$to)
{

for($days=strtotime($from);$days<=strtotime($to);$days+=3600*24)
{
$day[]=date(……
[/Quote]
嗯,thank you very much! 总算解决了
huakaihualuolemon 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 foolbirdflyfirst 的回复:]

StartTime EndTime
11.01 11.11
11.02 11.08
======================
如果只有这两条数据,得到
11.01 ~ 11.02
11.02 ~ 11.11
两条,这个还算明白


StartTime EndTime
11.01 11.11
11.02 11.08
11.03 11.15
=============……
[/Quote]
foolbirdflyfirst 2011-11-17
  • 打赏
  • 举报
回复
StartTime EndTime
11.01 11.11
11.02 11.08
======================
如果只有这两条数据,得到
11.01 ~ 11.02
11.02 ~ 11.11
两条,这个还算明白


StartTime EndTime
11.01 11.11
11.02 11.08
11.03 11.15
======================
如果有3条数据,为什么不是
11.01 ~ 11.02
11.02 ~ 11.03
11.03 ~ 11.11
11.11 ~ 11.15
4条?
huakaihualuolemon 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuzuning 的回复:]
1、你打算在哪里计算,php?mysql?
2、结果中的 11.18 11.20 是哪里来的?原始数据中并未包括
[/Quote]

主要也是想获得 11.02-11.11 和 11.13-11.15 这样的重叠段
huakaihualuolemon 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuzuning 的回复:]
1、你打算在哪里计算,php?mysql?
2、结果中的 11.18 11.20 是哪里来的?原始数据中并未包括
[/Quote]

php,例如开始时间已经存在start数组中 对应结束时间存在end数组,要获得总的时间段分成的各个段的时间
yunprince 2011-11-17
  • 打赏
  • 举报
回复
晓不得你要做啥
xuzuning 2011-11-17
  • 打赏
  • 举报
回复
1、你打算在哪里计算,php?mysql?
2、结果中的 11.18 11.20 是哪里来的?原始数据中并未包括

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧