0

我有两个时代。我想找出两个时期内有效的所有日期。

例如,如果我有 94​​6684800(星期六,2000 年 1 月 1 日 00:00:00 GMT)和 947203200(星期五,2000 年 1 月 7 日 00:00:00 GMT),我希望能够得到:01/01/ 2000 年、2000 年 2 月 1 日、2000 年 3 月 1 日、2000 年 4 月 1 日等。

4

6 回答 6

2

如果你有 PHP 5.3 或更新版本,你可以这样做:

$date1 = new DateTime;
$date1->setTimestamp(946684800);

$date2 = new DateTime;
$date2->setTimestamp(947203200);

$interval = new DateInterval('P1D');

while ( $date1 <= $date2 )
{
  $dates_in_between[] = $date1->getTimestamp();
  $date1->add($interval);
}

或者,你可以使用这个:

// 1 day = 60 seconds * 60 minutes * 24 hours = 86400
for ($date = 946684800; $date <= 947203200; $date += 86400)
  $dates_in_beteween[] = $date;

$dates_in_between将包含介于两者之间的“日期”列表。

于 2011-06-21T15:20:49.350 回答
1

鉴于您的纪元以秒为单位,您始终可以将一天中找到的秒数添加到第一个纪元:

 946684800 + 86400 = 946771200 -> Sun, 02 Jan 2000 00:00:00 GMT

继续这样,我解释得更好:

947203200 - 946684800 = 518400 / 86400 = 6 (exactly 6 days)

所以(伪代码):

for(int i = 946684800; i<946684800 ;i+=86400){
    day = getDate(i);
}
于 2011-06-21T15:18:35.090 回答
1

PHP 时间值只是 Unix 时间戳 - 自 1970 年 1 月 1 日以来的秒数。关闭 PHP 5 的 datetime 对象:

$start = strtotime('01 Jan 2000');
$end = strtotime('07 Jan 2000');

for ($d = $start; $d <= $end; $d += 86400) { // increment by 86,400 seconds, aka 1 day
    echo date('d/m/Y', $d);
}

使用 DateTime / DateInterval 对象有更好的方法,但这只是为了展示基础知识。

于 2011-06-21T15:19:47.037 回答
1
$epoch1 = '946684800';
$epoch2 = '947203200';
$i = 0;
while($time < $epoch2) {
    $time = mktime(0, 0, 0, date("m", $epoch1)  , date("d", $epoch1)+$i, date("Y",$epoch1));
    echo date('d/m/Y', $time)."<br>";
    $i++;
}
于 2011-06-21T15:20:49.523 回答
1

如果正确理解问题,您希望在 2 个时期内的每一天(2000-01-01 和 2000-01-07)..

可以这样做:

<?php
$epoch1 = 946684800;
$epoch2 = 947203200;
$difference = $epoch1 - $epoch2;
..
//count days
$amountOfDays = round(($epoch2-$epoch1)/86400);

//looping all days
for($i=1; $i<=$amountOfDays; $i++) {
echo date('d/m/Y', $epoch1+($i*86400);
}
?>
于 2011-06-21T15:21:28.553 回答
0
$start = strtotime('2011-06-01');
$end = strtotime('2011-06-15');
$date = $start;
$anArray = array();

while ($date <= $end) {
    $date = strtotime("+1 DAY", $date);
    $anArray[] = $date;
}        
于 2011-06-21T15:26:49.337 回答