2010-10-01 127 views
0

希望有人可以告訴我這個小小的調試腳本是怎麼回事。PHP日期/時間和mktime

<?PHP 
// function generates the list of times for 
function generateTimes($date) { 

$currentDate = $date; 
echo "RECEIVED CURRENT DATE: " . date("m/d/Y g:iA", $currentDate) . "<br /><br />"; 

for($i = 0; $i < 48; $i++) { 
    echo date("g:iA", $currentDate) . "<br />"; 
    $currentDate = mktime(date("g", $currentDate),date("i", $currentDate)+30,0,date("m", $currentDate),date("d", $currentDate),date("Y", $currentDate)); // 30 minutes 
} 

} 
if (isset($_POST['generate_date'])) { 
echo "Date Stamp: " . strtotime($_POST['date']) . "<br /><br />"; 
echo "The time you entered: " . date("r", strtotime($_POST['date'])) . "<br /><br />"; 
generateTimes($_POST['date']); 

} 
echo "<form method=post action='timestampgen.php'>"; 
echo "<input type=text name='date' />"; 
echo "<input type=submit name='generate_date' value='Generate Time Stamp' />"; 
echo "</form><br /><br />"; 

?> 

我提交的日期,如10年10月1日上午12:00,我希望它產生的時間以30個分鐘間隔..但它似乎是工作,我認爲這是關係到我的mktime參數

我一直在工作一整天,所以這可能是我瘋了。

+0

您忘了提及期望的輸出與實際輸出的不同。 – Matthew 2010-10-01 20:03:34

回答

2

如何使用strtotime()

function generateTimes($date) { 
    // convert to timestamp (make sure to validate the $date value) 
    $currentDate = strtotime($date); 

    for ($i=0; $i<48; $i++) { 
     echo date("g:iA", $currentDate) . "<br />"; 
     $currentDate = strtotime('+30 minutes', $currentDate); 
    } 
}
0

一旦您掌握了當前時間,您只需將1800(30分鐘乘以60秒)添加到日期戳值以將其移到半小時前;有沒有必要反覆mktime()猴子。

0
<? 
$currentDate = $date; 
echo "RECEIVED CURRENT DATE: " . date("m/d/Y g:iA", strtotime($currentDate));  

for($i = 0; $i < 48; $i++) { 
    $currentDate= date("m/d/Y g:iA",strtotime("$currentDate +30 minutes")); 
    echo $currentDate."<br/>"; 
} 
?> 
0
start = new DateTime('10/1/10 12:00AM'); 
$interval = new DateInterval('PT30M'); 

foreach(new DatePeriod($start, $interval, 48) as $time) 
{ 
     echo $time->format('Y-m-d g:iA')."\n"; 
} 

產量:

2010-10-01 12:00AM 
2010-10-01 12:30AM 
2010-10-01 1:00AM 
2010-10-01 1:30AM 
... 
2010-10-01 11:30PM 
2010-10-02 12:00AM 

您可以通過DatePeriod::EXCLUDE_START_DATE作爲第四個參數DatePeriod的構造函數來跳過第一個條目。