0

我在使用 PHP 日期函数时遇到了一些麻烦(这方面我的知识几乎为零)。

我想将一周中接下来的 5 天保存在 3 个参数中,例如变量$month$dayofmonth$dayofweek让它在 6 月 4 日星期二显示,日期的每个部分都可以放在其对应的 html div 元素中。

在过去的 2 天里,我用不同的代码进行了实验,但没有一个有效,3 小时前我得出的结论是,按照我获得月份的方式,我会在月底发生冲突,因为名称发生了变化。所以我会有 5 月 31 日星期五、5 月 1 日星期六、5 月 2 日星期日等。

我现在所拥有的,我想我已经在月底纠正了这个问题。

$month = date("F");
$day_1 = date("j");
$day_2 = date("j", strtotime("+1 days"));
$day_3 = date("j", strtotime("+2 days"));
$day_4 = date("j", strtotime("+3 days"));
$day_5 = date("j", strtotime("+4 days"));
$wday_1 = date("l");
$wday_2 = date("l", strtotime("+1 weekday"));
$wday_3 = date("l", strtotime("+1 weekday"));
$wday_4 = date("l", strtotime("+1 weekday"));
$wday_5 = date("l", strtotime("+1 weekday"));
$next_month = date("F", strtotime("+1 month"));
echo $day_1." ".$wday_1." ";
if($day_1 == 28 || $day_1 == 29 || $day_1 == 30 || $day_1 == 31 || $day_2 == 28 || $day_2 == 29 || $day_2 == 30 || $day_2 == 31 ||
$day_3 == 28 || $day_3 == 29 || $day_3 == 30 || $day_3 == 31 || $day_4 == 28 || $day_4 == 29 || $day_4 == 30 || $day_4 == 31 ||
$day_5 == 28 || $day_5 == 29 || $day_5 == 30 || $day_5 == 31) { $month = $next_month; }
echo $month;

我已阅读有关日期的文档,但我需要将日期的每一部分放在不同的变量中,以便在本地化更改和 SQL 选择中轻松使用。

4

4 回答 4

1

实现此目的的一种方法是使用DatePeriod;DatePeriod 的实例是可迭代的,因此您可以在 foreach 循环中使用它们。

// a date period starting today spanning 5 days and separated into 1 day segments
$period = new \DatePeriod(new \DateTime(), new \DateInterval('P1D'), 4);
foreach ($period as $day) {
  echo $day->format('F j l');
}

对于您想要做的事情,这可能有点矫枉过正,但 DatePeriods 经常被忽视,这是不幸的,因为它们真的很方便。

于 2013-06-03T23:00:11.160 回答
0

使用DateTime对象而不仅仅是date()函数。如果我正确理解你想要什么,你可以这样做:

$date = new DateTime();
for ($i = 0; $i < 5; ++$i) {
    echo $date->format('F j l'); // Month, day of month, day of week
    $date->modify('+1 day'); // this will change the timestamp stored in
                             // the DateTime object accordingly.
}
于 2013-06-03T22:40:23.687 回答
0

根据您在“用不同的代码进行最后 2 天的实验”之前应该阅读的文档,您可以使用以下内容简单地获取所需的日期,而无需任何变量:

for($i = 1; $i <= 5; $i++) {
    date("F j l", strtotime("+".$i." days"));
}

http://php.net/manual/en/function.strtotime.php

于 2013-06-03T22:41:12.660 回答
-1

下面附上了一个简单的程序,它以您想要的格式打印 2013 年的所有日子,日期、月份和星期由 div 分隔。

我建议您查看日期格式以了解打印格式化日期的多种方法。

<?php

$inicio = new DateTime();
$inicio->setDate(2013, 1, 1);


$fim = new DateTime();
$fim->setDate(2014, 1, 1);

while($inicio < $fim)
{


    echo "<div>";
    echo $inicio->format("M"); 
    echo "</div>";

    echo "<div>";
    echo $inicio->format("j");
    echo "</div>";

    echo "<div>";
    echo $inicio->format("l");
    echo "</div>";

    echo "<br>";

    $inicio->add(new DateInterval('P1D')); // sums 1 day in date

}


?>
于 2013-06-03T23:05:34.013 回答