我有一个数组中的日期列表(以unix整数格式)。
我按升序对这些数字进行了排序。完成。
现在,我使用foreach命令循环遍历每个元素。
每次小时数据发生变化时,我都会尝试添加echo '<p>';
...所以我试图获取一个日期列表,排序,并且每小时都有一个<p>
所以他们是每小时一次......
怎么做?
答案 0 :(得分:1)
这是你在找什么?
//list of unix timestamps
$timeStamps = array();
//false data for testing
for($i=1;$i<=30;$i++){
$timeStamps[] = strtotime("+".($i*10)." minutes");
}
//remember the last value.
$new = '';
$last = '';
//loop through the timestamps
foreach($timeStamps as $ts){
//generate a hour string for this ts
$new = date('d-M-Y H', $ts);
//if this hour string is not the same as the last hour string echo p tag
if($new != $last){
echo '<p>';
}
//set $last to the new hour string for next loop.
$new = $last;
//echo the date
echo date('d-M-Y H:i', $ts).'<br />';
}
我还在小时字符串中包含了日期,以防止日期更改出现问题。例如,如果时间戳用于1-NOV-2011 1:00am
而下一个时间戳用于2-NOV-2011 1:00am
,则仅检查小时将不会回显&lt; p&gt;。包括日期。
答案 1 :(得分:0)
将您的UNIX时间发送到php函数date()。它会传回一个字符串,当小时改变时你应该注意到它。
答案 2 :(得分:0)
没有经过测试,但不在我的头顶:
$currentHour = -1;
foreach ($dates as $date)
{
$dateHour = intval(date('G'), $date);
if ($currentHour != $dateHour)
{
echo '<p>';
}
if ($dateHour == $currentHour + 1)
{
echo '</p>';
}
$currentHour = $dateHour;
}
答案 3 :(得分:0)
不确定为什么要使用Unix日期,但......
答案应该在于简单的数学。一小时是中位数。 Unix时间戳从1970年1月1日0000时开始。
因为Unix时间戳是秒,你可以通过将时间戳除以3600来找到一小时。如果它可以被整除,那么你的中位数是一小时。
您需要使用modulus。
echo "<p>";
foreach ($unixtimes as $my_timestamp)
{
if ($my_timestamp % 3600 == 0) echo "</p><p>"; // If there's no remainder, it's an hour.
echo $my_timestamp;
echo "<br />";
}
语法可能不正确,但这个想法很合理。还可以节省您进行日期转换的时间。祝你好运。
编辑:为你写完整篇文章。
答案 4 :(得分:0)
这样的事情应该有效!祝你好运:)
foreach ( $timestamps as $timestamp )
{
// Get the number of hours this timestamp represents starting Jan 1, 1970 (3600 are seconds in an hour)
$currentHour = floor( $timestamp / 3600 );
if ( $currentHour != $previousHour )
{
echo '<p>';
// Add your logic here..
$previousHour = $currentHour;
}
}