PHP中DateTime的特定UNIX时间戳

时间:2014-03-01 13:38:52

标签: php datetime

所以,这是交易。在过去的几个小时里,我一直在为此而奋斗,并且没有取得任何进展。我已准备好通过其中的几个,甚至尝试过叔叔谷歌,但没有快乐。

我正在开展一个项目,涉及很多夜总会和下班后的地点。因此,我们将重新定义的日期是从凌晨5点到凌晨4点59分。从现在开始/结束这段时间,我有一段时间了。它必须是时区特定的是让我搞砸的部分。

这是丑陋的,这是在几个不同的失败理论之后...我真的在这个上追逐自己的尾巴,所以任何帮助都会受到赞赏。

function util_TimeInfo($timezone, $dst){
    // Get current DateTime
    $dt = new DateTime();
    $tz = new DateTimeZone($timezone);
    $dt->setTimezone($tz);

    // split to variables
    $year = $dt->format('Y');
    $month = $dt->format('m');
    $day = $dt->format('d');
    $hour = $dt->format('H');
    $minute = $dt->format('i');
    $second = $dt->format('s');

    // Convert hour to string
    $inthour = intval($hr);

    // Check which day it is a part of
    $mytime[0] = time();
    if($inthour < 5){
        $start_d = date('d', strtotime('-1 day', $mytime[0]));
        $start_m = date('m', strtotime('-1 day', $mytime[0]));
        $start_y = date('Y', strtotime('-1 day', $mytime[0]));
        $end_d = date('d', $mytime[0]);
        $end_m = date('m', $mytime[0]);
        $end_y = date('Y', $mytime[0]);
    } else{
        $start_d = date('d', $mytime[0]);
        $start_m = date('m', $mytime[0]);
        $start_y = date('Y', $mytime[0]);
        $end_d = date('d', strtotime('+1 day', $mytime[0]));
        $end_m = date('m', strtotime('+1 day', $mytime[0]));
        $end_y = date('Y', strtotime('+1 day', $mytime[0]));
    }

    // Create current start of day and end of day in unix timestamp
    $mytime[1] = mktime('05', '00', '00', $start_m, $start_d, $start_y, $dst);
    $mytime[2] = mktime('04', '59', '59', $end_m, $end_d, $end_y, $dst);

    //Return times
    return $mytime;
}

2 个答案:

答案 0 :(得分:0)

这个简单的代码怎么样:

$tz = new DateTimezone('Europe/Berlin');
$now = new DateTime('now', $tz);
$start = new DateTime('today 5:00am', $tz);
$end = new DateTime('tomorrow 4:59am', $tz);
if ($now < $start) {
    $start = new DateTime('yesterday 5:00am', $tz);
    $end = new DateTime('today 4:59am', $tz);
}

demo

答案 1 :(得分:0)

使用Glavic的代码作为基础,我能够使用if语句来处理我想要的时间来处理午夜和凌晨5点之间的时间。

// Get current DateTime
$dt = new DateTime();
$tz = new DateTimeZone($timezone);
$dt->setTimezone($tz);

// Set cutoff for 5am
$cutoff = new DateTime('today 5:00am', $tz);

// Adjust start/end for day
if($dt < $cutoff){
    $start = new DateTime('yesterday 5:00:00am', $tz);
    $end = new DateTime('today 4:59:59am', $tz);
} else{
    $start = new DateTime('today 5:00:00am', $tz);
    $end = new DateTime('tomorrow 4:59:59am', $tz);
}