PHP日期时间格式和字符串



我正在为在线考试构建一个Joomla组件,我正在努力进行格式转换。基本上我想得到日期之间的差异(以秒为单位),然后将它们转换为分钟,但无论我尝试什么,我在网上搜索什么(包括SO),我似乎不能让事情正常工作。

我有以下代码:

<?php
$session =& JFactory::getSession();
$sessionStuff = $session->get('quizSession');
$time_config =& JFactory::getConfig();
$time_jnow =& JFactory::getDate();
$time_jnow->setOffset( $time_config->getValue('config.offset' ));
$time_now = strtotime($time_jnow);
$started_time = strtotime($sessionStuff['lineSession']['started_on']);
$elapsedtime = /*gmdate("H:i:s",*/ abs($started_time - $time_now)/*)*/;
echo "Start_time: " . $started_time . '- Type: ' . gettype($started_time). '<br/>';
echo "Now: " . $time_now . '- Type: ' . gettype($time_now). '<br/>';
echo "Elapsed time: " . $elapsedtime . /*'- Type: ' . gettype($elapsedtime) .*/ '<br/>';
$availabletime = $started_time - $elapsedtime;
if(empty($sessionStuff)){
    $availabletime = ($this->quiz->time_limit) ? $this->quiz->time_limit : 0;
} else {
    $availabletime = $started_time - $elapsedtime;
}
echo "Available: " . $availabletime . '- Type: ' . gettype($availabletime);
?>

输出如下:

Start_time: 1365756958-类型:integer

现在:1365757510-类型:整数

运行时间:552

可用值:1365756406-类型:整型

然后我有这个JS代码接收值(以分钟为单位)并将其转换为正确的格式:

    var hours ;
    var minutes ; 
    var seconds ;
    var t ;
    var availableTime ;
    var remainingTime ;
window.onload = function () {
    listener();
    availableTime = <?php
                        echo ($this->quiz->time_limit) ? $this->quiz->time_limit : 0;;                       
                    ?> ;
    if (availableTime)
    {
        hours = Math.floor(availableTime / 60) ;
        minutes = availableTime % 60;
        if (hours < 10) {
            hours = '0' + hours ;
        }
        if (minutes < 10) {
            minutes = '0' + minutes ;
        }
        seconds = '00' ;
        var timer = document.getElementById('timer') ;
        timer.innerHTML = '<?php echo JText::_('TIME_REMAINING') ; ?> ' + hours + ":" + minutes + ":" + seconds ;
        remainingTime = availableTime *= 60 ;
        updateTimer();
    }
}
function pad(number, length) 
{
    var str = '' + number;
    if (str.length < length) {
        str = '0' + str;
    }
    return str;
}
function updateTimer()
{
    seconds -= 1 ;
    seconds = pad(seconds, 2) ;
    if (seconds < 0)
    {
        seconds = '59' ;
        minutes -= 1 ;
        minutes = pad(minutes, 2) ;
        if (minutes < 0)
        {
            minutes = '59' ;
            hours -= 1 ;
            hours = pad(hours, 2) ;
            if (hours < 0)
            {
                hours = minutes = seconds = '00' ;
                document.getElementById('timeUp').value = 1 ;
                document.jquarks_quiz.submit();
                return true ;
            }
        }
    }
    var timer = document.getElementById('timer') ;
    timer.innerHTML = '<?php echo JText::_('TIME_REMAINING') ; ?> ' + hours + ':' + minutes + ':' + seconds ;
    remainingTime -= 1 ;
    if (Math.floor(availableTime / 10) == remainingTime ) 
    {
        timer.style.color="white" ;
        timer.style.backgroundColor = "#DD0000" ;
    }
    t = setTimeout("updateTimer()", 1000);
}

如果我在这段代码中使用"native"格式(在PHP中):

$time_now = $time_jnow;
$started_time = $sessionStuff['lineSession']['started_on'];

我得到了输出:

Start_time: 2013-04-12 09:55:58- Type: string

现在:2013-04-12 10:23:20-类型:对象

现在,我打算计算' start_time '和'time_now'之间的时间差,并且(如果是页面刷新和会话设置)减去'elapsedtime'到'started_time',以便超时计数器将从它离开的地方继续。

不管我怎么努力,我似乎都不能使事情正常工作。谁能给我指个正确的方向?我已经在这上面浪费了太多时间,PHP不是我的强项。我怎样才能达到预期的目标?

编辑:

我意识到JS 'availableTime'正在获得一个常数时间,但这只是为了调试的目的。一旦一切正常工作,它将被输入PHP '$availabletime'输出。

编辑2:

我似乎没有明确说明目标是什么。一旦考试开始,假设有15分钟的空闲时间。假设用户在1分31秒(00:01:31)后刷新页面,则可用时间应为13分29秒(00:13:29)。这是我无法实现的行为,尽管我可以执行计算已经过了多少时间(以秒为单位)。

这是一个非常简单的方法。

 // Define your time strings
 $date1 = new DateTime("2013-01-01 07:00:00");
 $date2 = new DateTime("2014-01-01 03:17:00");
 // Perform a bit of black hoodoo magic
 $interval = $date1->diff($date2,true);
 // Output the result in a formatted fashion
 echo $interval->format("%d days %h hours %i minutes %s seconds");
 // Or as a number of seconds. This is a bit more complicated.
 echo (($interval->y * 365 * 24 * 60 * 60) + 
           ($interval->m * 30 * 24 * 60 * 60) + 
           ($interval->d * 24 * 60 * 60) + 
           ($interval->h * 60 * 60) + 
           ($interval->i * 60) + 
           $interval->s); 
 // For more info, check this out along with the doc:
 var_dump($interval);

这允许你抽象掉你正在做的所有计算,以便专注于逻辑。出了什么问题?

相关内容

  • 没有找到相关文章

最新更新