0

对 PHP 来说非常新,只是试图为新闻提要页面设置三元语句。

目标:

如果故事的发布日期超过 24 小时,请显示发布前的天数。即,如果故事是在 48 小时前发布的,则显示 2 天。

否则,如果故事的发布日期在过去 24 小时内,请显示发布前的小时数。即,如果它是 9 小时前发布的,则显示 9 小时。

我目前的代码是这样的:

foreach($result as $news_item)
{
$news_item_timestamp = strtotime($news_item["DateInserted"]);
$just_updated = ((time() - $news_item_timestamp) < 3600) ? "<span class='just_updated'>NEW</span>" : "";
$link = "news-details.php?news_item_id=".$news_item["NewsItemId"]."&feed=".$news_item["FeedId"];
echo "<a href='$link'><div class='news_item'>";
echo "<div class='headline'>$just_updated ".$news_item["Headline"]."</div>";
//the line below is the code in question
echo "<div class='dateline'>".date("l, F j, Y", $news_item["ThisRevisionCreated"])."</div>";
echo "</div></a><div class='cleardiv'></div>";
}

如您所见,没有三元运算符设置。但我假设第 8 行是我需要投入其中的地方。

任何建议表示赞赏。

4

3 回答 3

2

在 PHP 中,与大多数编程语言一样,您需要一直在脑海中处理类似这样的逻辑事情。解决此问题的步骤通常遵循三个步骤:

  1. 知道你想要什么。这是您基本上为我们制定的步骤。你想要一个相对日期系统。时间戳将转换为自提交帖子以来的小时数或自提交以来的天数。
  2. 思考逻辑。这通常是最关键的一步。一旦你知道你想要什么,有时可能很难在实际代码中准确地确定你试图执行的内容。有时,利用伪代码将帮助您完成这一步。
  3. 对其进行编程。这是您的逻辑在编辑器中显示的地方。有时,您可能需要重新调整一些东西,但如果您已经考虑过所有事情,那么这一步就不需要那么难了。

既然您已经考虑了第一步,那么接下来就是考虑如何通过现实生活中的代码来实现逻辑。设置一个伪代码示例,我会执行以下操作。

if timeElapsed < 24 hours
    print hoursElapsed
else
    print daysElapsed

请注意,我们并没有完全设置三元运算符,但我们只有最低限度,可以轻松地将上面的内容转换为 PHP 并适合您已经设置的代码环境。考虑到这一点,我们需要定义一些变量,但我们可以在 PHP 中做到这一点:

$elapsedTime = time() - $news_item_timestamp; //difference in time from post to now
$relativeDate = ($elapsedTime < 86400) ? round($elapsedTime/3600) . " minutes ago" : round($elapsedTime / 86400) . " days ago";

// 86400 seconds = 60 seconds * 60 minutes * 24 hours = 1 day
// 3600 seconds = 60 seconds * 60 minutes = 1 hour
于 2013-06-24T19:03:06.647 回答
0

简单的回答。

这是我对三元的理解。

echo ($just_updated > 24*60*60) ? ((int)($just_update / 24*60*60)).' days ago.' : ((int)($just_updated /3600)).' hours ago';

我喜欢对我的东西进行分组,以确保我在做什么。希望它是你正在寻找的。

于 2013-06-24T19:07:39.320 回答
0
if ($just_updated > 24*60*60)? echo (intval($just_updated/3600*24)):echo ($just_updated/3600)

如果更新时间 > 24 小时,则回显更新时间/天数(这是 24*3600),否则回显更新时间/小时数(这是 3600)

于 2013-06-24T18:50:23.570 回答