【发布时间】:2016-11-12 17:25:09
【问题描述】:
我是 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));}
在控制器中:
$datenumbers = array(0, 1, 2, 3, 4, 5, 6, 7);
$dateResult = $this->bike_model->week_start(date("Y/m/d"), $datenumber);
在视图中:
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];}
我已经使用它几天了,它在我的x-axis 上一直显示 7 月 3 日星期日作为第一个数字,这是应该的。但是今天是星期天,我希望它现在说 7 月 10 日星期日是我最近的一周。但是,它仍然在上周日显示!
所以我的问题是,这里是否存在错误,或者我是否误解了“一周周日”应该如何工作?
我的目标是让我的函数以零作为参数返回最近一周的开始时间——如果是星期天,则返回当前星期天或过去的星期天。我找到了一种解决方法,方法是在函数中添加一个 if else 来检查它是否是星期天。
if ($tstring == strtotime('this Sunday')){
$wknumber = $counter;}
else{
$wknumber = ($counter + 1);}
但是,这感觉很笨拙,我正在寻找一种更优雅的方式。我还想了解“-一周星期天”出了什么问题,因为我认为我已经了解它是如何工作的。
谢谢!
【问题讨论】:
-
我看到你的旧代码有
$start = (date('w', $tstring) == 0) ? $tstring : strtotime('last sunday', $tstring);。这不是解决了你的问题吗? -
该代码是我尝试过的,但它最终在整个 x 轴上为我提供了当前星期日。我已将该代码留在模型的注释中,以便更多地考虑如何实现。
-
我刚刚再次尝试了该替代代码。基本上,问题在于它正在检查它是否是星期天(是的!),如果是,则为数组中的每个值返回今天的日期。我认为在轴上的每个点上提前一周获得的唯一方法是原始问题底部的 if/else 语句。尽管我的代码现在 似乎 可以正常工作,但我仍将这个问题悬而未决,因为我仍然不清楚“- $i week Sunday”到底在做什么。它是否会在除星期日之外的每一天都为您提供上一个星期日,在这种情况下,它会为您提供当前的星期日吗?
标签: php mysql codeigniter date strtotime