Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-获取当前日期间隔的开始和结束日期_Php_Date_Datetime - Fatal编程技术网

PHP-获取当前日期间隔的开始和结束日期

PHP-获取当前日期间隔的开始和结束日期,php,date,datetime,Php,Date,Datetime,我有两个unix时间戳 $now = strtotime("2013-12-10"); $start_date = strtotime("2013-01-01"); $end_date = strtotime("2013-12-31"); < > >代码> $开始日期< /代码>和 $结束日期跨越一段时间, $$现在/代码>时间戳位于两个中间。 我还有一个可变的日期间隔,如下所示: $interval = new DateInterval('P1W'); // or $

我有两个unix时间戳

$now         = strtotime("2013-12-10");
$start_date  = strtotime("2013-01-01");
$end_date    = strtotime("2013-12-31");
< > >代码> $开始日期< /代码>和<代码> $结束日期<代码>跨越一段时间,<代码> $$现在/代码>时间戳位于两个中间。

我还有一个可变的日期间隔,如下所示:

$interval = new DateInterval('P1W');
// or
$interval = new DateInterval('P3D');
鉴于上述情况,我如何获得
现在所处区间的开始和结束时间戳?
$now
$start\u date
$end\u date
和间隔将是动态的

示例

假设我有这些参数:

$start_date = '2013-01-01 00:00:00';
$end_date   = '2013-12-31 23:59:59';
$now        = '2013-12-10 15:45:34';
$interval   = new DateInterval( 'P1W' );
我想知道$now所在区间的开始和结束日期。我期望上述参数的输出为:

$int_start_date = '2013-12-10 00:00:00';
$int_end_date   = '2013-12-16 23:59:59';
你可以试试:

$now = time();
$interval = new DateInterval('P1W');

$interval_seconds = $interval->s + ($interval->i * 60) + ($interval->h * 60 * 60) + ($interval->d * 60 * 60 * 24);
$half_interval = round($interval_seconds / 2);

// Unix timestamps
$interval_start = $now - $half_interval;
$interval_end = $now + $half_interval;
编辑:评论后的第二个答案

这只适用于长度为1的时间间隔,如1周、1年等

如果你的时间间隔>1,那么你需要以某种方式确定你的时间间隔有多远。。。e、 g对于两周的间隔,您是在第一周还是第二周

$now = time();

$interval = "week";

switch ($interval) {
    case "year":
        $start_int = strtotime(date("Y", $now)."-01-01 00:00:00");
        $end_int = strtotime(date("Y", $now)."-12-31 23:59:59");
    break;
    case "month":
        $start_int = strtotime(date("Y-m", $now)."-01 00:00:00");
        $end_int = strtotime(date("Y-m-t", $now)." 23:59:59");
    break;
    case "week":
        $start_week = date("Y-m-d", strtotime("previous Monday", $now));
        $end_week = date("Y-m-d", strtotime("next Sunday", $now));

        $start_int = strtotime($start_week." 00:00:00");
        $end_int = strtotime($end_week." 23:59:59");
    break;
    case "day":
        $start_int = strtotime(date("Y-m-d", $now)." 00:00:00");
        $end_int = strtotime(date("Y-m-d", $now)." 23:59:59");
    break;
    case "hour":
        $start_int = strtotime(date("Y-m-d H", $now).":00:00");
        $end_int = strtotime(date("Y-m-d H", $now).":59:59");
    break;
    case "minute":
        $start_int = strtotime(date("Y-m-d H:i", $now).":00");
        $end_int = strtotime(date("Y-m-d H:i", $now).":59");
    break;
}
echo date("Y-m-d H:i:s", $start_int), "<br>";
echo date("Y-m-d H:i:s", $end_int), "<br>";
$now=time();
$interval=“周”;
交换机($间隔){
案件“年份”:
$start_int=strottime(日期(“Y”,现在是$now)。“-01-01 00:00:00”);
$end_int=strottime(日期(“Y”,现在是$now)。“-12-31 23:59:59”);
打破
案例“月份”:
$start_int=strottime(日期(“Y-m”,现在是$now)。“-01 00:00:00”);
$end_int=strotime(日期(“Y-m-t”),$now.“23:59:59”);
打破
案例“一周”:
$start_week=日期(“Y-m-d”,标准时间(“前一个星期一”,“现在美元”);
$end_week=日期(“Y-m-d”,标准时间(“下周日”,“现在美元”);
$start_int=strotime($start_week.“00:00:00”);
$end_int=strotime($end_week.“23:59:59”);
打破
案件“日期”:
$start_int=strottime(日期(“Y-m-d”,现在是$now)。“00:00:00”);
$end_int=strotime(日期(“Y-m-d”),$now.“23:59:59”);
打破
案例“小时”:
$start_int=strottime(日期(“Y-m-d H”,现在是$now)。“:00:00”);
$end_int=strotime(日期(“Y-m-d H”,现在是$now)。”:59:59);
打破
案例“分钟”:
$start_int=strottime(日期(“Y-m-d H:i”,现在是$now)。”:00);
$end_int=strotime(日期(“Y-m-d H:i”,现在是$now)。”:59);
打破
}
回显日期(“Y-m-d H:i:s”,$start_int),“
”; 回音日期(“Y-m-d H:i:s”,$end_int),“
”;
更新3

我把你答案中的逻辑放在一个循环中:

$start_date    = new DateTime( '2013-01-01 00:00:00' );
$end_date      = new DateTime( '2013-12-31 23:59:59' );
$end_date_ts   = $end_date->getTimestamp();
$now           = new DateTime( '2013-12-10 15:45:34' );
$now_ts        = $now->getTimestamp();
$interval      = new DateInterval( 'P1W' );
$period        = new DatePeriod( $start_date, $interval, $end_date );

$int_start_date = $start_date;
$int_end_date   = $end_date;

foreach ( $period as $dt ) {
    $timestamp = $dt->getTimestamp();

    if ($now_ts >= $timestamp) {
        $int_start_date->setTimestamp($timestamp);
    }
    if ($now_ts < $timestamp and $timestamp < $int_end_date->getTimestamp()) {
        $int_end_date->setTimestamp($timestamp - 1);
    }
}
var_dump( $int_start_date->format( 'Y-m-d H:i:s' ) );
var_dump( $int_end_date->format( 'Y-m-d H:i:s' ) );
$start_date=新日期时间('2013-01-01 00:00:00');
$end_date=新日期时间('2013-12-31 23:59:59');
$end_date_ts=$end_date->getTimestamp();
$now=新日期时间('2013-12-10 15:45:34');
$now_ts=$now->getTimestamp();
$interval=新的日期间隔('P1W');
$period=new DatePeriod($start\u date,$interval,$end\u date);
$int_start_date=$start_date;
$int_end_date=$end_date;
foreach(期间为$dt){
$timestamp=$dt->getTimestamp();
如果($now\u ts>=$timestamp){
$int_start_date->setTimestamp($timestamp);
}
如果($now_ts<$timestamp和$timestamp<$int_end_date->getTimestamp()){
$int_end_date->setTimestamp($timestamp-1);
}
}
变量转储($int_start_date->format('Y-m-dh:i:s');
变量转储($int\u end\u date->format('Y-m-dh:i:s');
您可以尝试:

$now = time();
$interval = new DateInterval('P1W');

$interval_seconds = $interval->s + ($interval->i * 60) + ($interval->h * 60 * 60) + ($interval->d * 60 * 60 * 24);
$half_interval = round($interval_seconds / 2);

// Unix timestamps
$interval_start = $now - $half_interval;
$interval_end = $now + $half_interval;
编辑:评论后的第二个答案

这只适用于长度为1的时间间隔,如1周、1年等

如果你的时间间隔>1,那么你需要以某种方式确定你的时间间隔有多远。。。e、 g对于两周的间隔,您是在第一周还是第二周

$now = time();

$interval = "week";

switch ($interval) {
    case "year":
        $start_int = strtotime(date("Y", $now)."-01-01 00:00:00");
        $end_int = strtotime(date("Y", $now)."-12-31 23:59:59");
    break;
    case "month":
        $start_int = strtotime(date("Y-m", $now)."-01 00:00:00");
        $end_int = strtotime(date("Y-m-t", $now)." 23:59:59");
    break;
    case "week":
        $start_week = date("Y-m-d", strtotime("previous Monday", $now));
        $end_week = date("Y-m-d", strtotime("next Sunday", $now));

        $start_int = strtotime($start_week." 00:00:00");
        $end_int = strtotime($end_week." 23:59:59");
    break;
    case "day":
        $start_int = strtotime(date("Y-m-d", $now)." 00:00:00");
        $end_int = strtotime(date("Y-m-d", $now)." 23:59:59");
    break;
    case "hour":
        $start_int = strtotime(date("Y-m-d H", $now).":00:00");
        $end_int = strtotime(date("Y-m-d H", $now).":59:59");
    break;
    case "minute":
        $start_int = strtotime(date("Y-m-d H:i", $now).":00");
        $end_int = strtotime(date("Y-m-d H:i", $now).":59");
    break;
}
echo date("Y-m-d H:i:s", $start_int), "<br>";
echo date("Y-m-d H:i:s", $end_int), "<br>";
$now=time();
$interval=“周”;
交换机($间隔){
案件“年份”:
$start_int=strottime(日期(“Y”,现在是$now)。“-01-01 00:00:00”);
$end_int=strottime(日期(“Y”,现在是$now)。“-12-31 23:59:59”);
打破
案例“月份”:
$start_int=strottime(日期(“Y-m”,现在是$now)。“-01 00:00:00”);
$end_int=strotime(日期(“Y-m-t”),$now.“23:59:59”);
打破
案例“一周”:
$start_week=日期(“Y-m-d”,标准时间(“前一个星期一”,“现在美元”);
$end_week=日期(“Y-m-d”,标准时间(“下周日”,“现在美元”);
$start_int=strotime($start_week.“00:00:00”);
$end_int=strotime($end_week.“23:59:59”);
打破
案件“日期”:
$start_int=strottime(日期(“Y-m-d”,现在是$now)。“00:00:00”);
$end_int=strotime(日期(“Y-m-d”),$now.“23:59:59”);
打破
案例“小时”:
$start_int=strottime(日期(“Y-m-d H”,现在是$now)。“:00:00”);
$end_int=strotime(日期(“Y-m-d H”,现在是$now)。”:59:59);
打破
案例“分钟”:
$start_int=strottime(日期(“Y-m-d H:i”,现在是$now)。”:00);
$end_int=strotime(日期(“Y-m-d H:i”,现在是$now)。”:59);
打破
}
回显日期(“Y-m-d H:i:s”,$start_int),“
”; 回音日期(“Y-m-d H:i:s”,$end_int),“
”;
更新3

我把你答案中的逻辑放在一个循环中:

$start_date    = new DateTime( '2013-01-01 00:00:00' );
$end_date      = new DateTime( '2013-12-31 23:59:59' );
$end_date_ts   = $end_date->getTimestamp();
$now           = new DateTime( '2013-12-10 15:45:34' );
$now_ts        = $now->getTimestamp();
$interval      = new DateInterval( 'P1W' );
$period        = new DatePeriod( $start_date, $interval, $end_date );

$int_start_date = $start_date;
$int_end_date   = $end_date;

foreach ( $period as $dt ) {
    $timestamp = $dt->getTimestamp();

    if ($now_ts >= $timestamp) {
        $int_start_date->setTimestamp($timestamp);
    }
    if ($now_ts < $timestamp and $timestamp < $int_end_date->getTimestamp()) {
        $int_end_date->setTimestamp($timestamp - 1);
    }
}
var_dump( $int_start_date->format( 'Y-m-d H:i:s' ) );
var_dump( $int_end_date->format( 'Y-m-d H:i:s' ) );
$start_date=新日期时间('2013-01-01 00:00:00');
$end_date=新日期时间('2013-12-31 23:59:59');
$end_date_ts=$end_date->getTimestamp();
$now=新日期时间('2013-12-10 15:45:34');
$now_ts=$now->getTimestamp();
$interval=新的日期间隔('P1W');
$period=new DatePeriod($start\u date,$interval,$end\u date);
$int_start_date=$start_date;
$int_end_date=$end_date;
foreach(期间为$dt){
$timestamp=$dt->getTimestamp();
如果($now\u ts>=$timestamp){
$int_start_date->setTimestamp($timestamp);
}
如果($now_ts<$timestamp和$timestamp<$int_end_date->getTimestamp()){
$int_end_date->setTimestamp($timestamp-1);
}
}
变量转储($int_start_date->format('Y-m-dh:i:s');
变量转储($int\u end\u date->format('Y-m-dh:i:s');

我自己也发现了这个问题,但问题很棘手

$start_date    = new DateTime( '2013-01-01 00:00:00' );
$end_date      = new DateTime( '2013-12-31 23:59:59' );
$end_date_ts   = $end_date->getTimestamp();
$now           = new DateTime( '2013-12-10 15:45:34' );
$now_ts        = $now->getTimestamp();
$interval      = new DateInterval( 'P1W' );
$period        = new DatePeriod( $start_date, $interval, $end_date );

$intervals = array();

foreach ( $period as $dt ) {
    $intervals[] = $dt->getTimestamp();
}

$intervals[]    = $end_date_ts;
$int_start_date = new DateTime();
$int_end_date   = new DateTime();

for ( $i = 0; $i < count( $intervals ); $i++ ) {
    if ( $now_ts >= $intervals[$i] && $now_ts <= $intervals[$i+1]) {
        $int_start_date->setTimestamp($intervals[$i]);
        $int_end_date->setTimestamp($intervals[$i+1]-1);
            break;
    }
}

var_dump( $int_start_date->format( 'Y-m-d H:i:s' ) );
var_dump( $int_end_date->format( 'Y-m-d H:i:s' ) );
$start_date=新日期时间('2013-01-01 00:00:00');
$end_date=新日期时间('2013-12-31 23:59:59');
$end_date_ts=$end_date->getTimestamp();
$now=新日期时间('2013-12-10 15:45:34');
$now\u t