我是 php 和 codeigniter 的新手。
我有一个函数,用于标记每周骑自行车的公里数图表的 x 轴。它通过从今天的日期开始倒数零个星期日或数组传递的 1、2、3 等来工作(或应该工作)。
我使用的是 PHP 版本 5.6.19,这是我的代码:
在模型中:
public function week_start($date, $counter){
$tstring = strtotime($date);
$wknumber = ($counter + 1);
$start = strtotime("-$wknumber weeks sunday", $tstring);
return array(date('M d', $start));}
在 Controller 中:
$datenumbers = array(0, 1, 2, 3, 4, 5, 6, 7);
$dateResult = $this->bike_model->week_start(date("Y/m/d"), $datenumber);
在 View 中:
for ($i = 0; $i < 8; $i++){
echo "<text class = \"axis\" y = \"357\" x = \"";
echo 26 + ($i*70);
echo "\" dy = \".35em\">";
echo $dates_for_table[$i];}
我已经用了几天了,它一直显示 7 月 3 日星期日作为我的 x-axis 上的第一个数字。 ,正如它应该有的那样。但今天是星期日,我预计 7 月 10 日星期日将成为我最近的一周。然而,上周日它仍在放映!
所以我的问题是,这里是否存在错误,或者我是否误解了“- 一周星期日”应该如何工作?
我的目标是让我的函数为零,因为参数返回最近一周的开始时间 - 如果是周日,则返回当前周日或过去的周日。我找到了一种解决方法,通过在函数中添加 if else 来检查是否是星期日。
if ($tstring == strtotime('this Sunday')){
$wknumber = $counter;}
else{
$wknumber = ($counter + 1);}
但是,这感觉很笨拙,我正在寻找一种更优雅的方式。我还想了解“- 一周星期日”出了什么问题,因为我以为我已经了解它是如何工作的。
谢谢!
最佳答案
以下是我如何使用面向对象的 DateTime 样式执行类似的操作:
$startDate = new DateTime('NOW'); // can pass date string if not today
# reset start date to last Sunday or today if it is Sunday:
$startDate->sub(new DateInterval('P'.($startDate->format('w')).'D'));
# for debugging, output first Sunday:
echo $startDate->format('Y-m-d H:i:s') . " => full date and time (check for timezone issues) \n\n";
$weeks = 8;
for ($i = 0; $i < $weeks; $i++) {
# don't decrement first pass; sub 1 week on subsequent:
$startDate->sub(new DateInterval('P'. (($i) ? 1 : 0) .'W'));
echo $startDate->format('Y-m-d') . "\n";
};
您应该能够适应您的目的。
如果您想变得更奇特,您还可以在循环中使用 DatePeriod 而不是使用 sub
:
$period = new DatePeriod(
$startDate,
DateInterval::createFromDateString('-1 week'),
7
);
foreach ($period as $date) {
echo $date->format('Y-m-d') . "\n";
}
关于PHP减去一周星期日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295510/