【问题标题】:Adding minutes to date time not working properly将分钟添加到日期时间无法正常工作
【发布时间】:2020-08-08 19:38:21
【问题描述】:

我正在处理Yii2。在其中,我试图将数据插入 3 个不同的阶段。即我正在一个一个地使用 3 个查询来插入不同类型的数据。数据插入是完美的,但日期时间不是。由于我想连续添加数据,所以我添加了for loop。但是它插入的日期时间总是相同的。请参阅下面的代码

for ($i = 0; $i <= 60; $i++) 
{
  $dt = date('Y-m-d H:i:s');
 $model401->data_date_time = date('Y-m-d H:i:s', strtotime('+5 minutes', strtotime($dt)));
 $model402->data_date_time = date('Y-m-d H:i:s', strtotime('+10 minutes', strtotime($dt)));
 $model403->data_date_time = date('Y-m-d H:i:s', strtotime('+15 minutes', strtotime($dt)));
.
.
.
.
.
.
}

保存在数据库中的日期时间是相同的,即

2020-04-25 11:11:57首次记录日期

2020-04-25 11:16:57第二个记录日期

2020-04-25 11:21:57第三个记录日期

2020-04-25 11:11:57第四次记录日期

2020-04-25 11:16:57第五个记录日期

2020-04-25 11:21:57第六次记录日期

表格视图

更新 1

for($i=0; $i<=60; $i++)
{
try {
            $cust_met_data = Yii::$app->db->createCommand(
            /** @lang text */ "SELECT m.`meter_id` , m.`msn` , 
                  m.`cust_id` , m.`device_id` FROM `mdc_meter_cust_rel` m ")->queryAll();
        } catch (Exception $e) {
        }

        $slave_id = $cust_met_data[0]['device_id'];
        $address = 0;
        $count = 14;
        $msn = $cust_met_data[0]['msn'];
        $cust_id = $cust_met_data[0]['cust_id'];

        // my base URL
        $api_url = 'https://localhost:44337/api/rtu/GetData/' . $slave_id . '/' . $address . '/' . $count;


        $curl = curl_init($api_url);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

        $curl_response = curl_exec($curl);

        $json = json_decode($curl_response);

        if ($json->{0} == '06') {
            echo " line 1656 ";
            echo " An error occurs ";

            //return $this->redirect(['index']);
        } else {
            echo " line 1663 ";
            $vol_1 = $json->{0};
            $vol_2 = $json->{1};
            $vol_3 = $json->{2};
            $curr_1 = $json->{3};
            $curr_2 = $json->{4};
            $curr_3 = $json->{5};
            $kwh = $json->{6};

            $dt =  date('Y-m-d H:i:s');
            $currDt = date('Y-m-d H:i:s', strtotime('+5 minutes', strtotime($dt)));
            $volDt = date('Y-m-d H:i:s', strtotime('+10 minutes', strtotime($dt)));
            $kwhDt = date('Y-m-d H:i:s', strtotime('+15 minutes', strtotime($dt)));
            $typeCurr = "401";
            $typeVol = "402";
            $typeKwh = "403";

            /***** for current *****/
            echo " adding current values ";

            $model401 = new MdcmetersData();
           // $model401->load(Yii::$app->request->post());
            $model401->data_date_time = date('Y-m-d H:i:s', strtotime('+5 minutes', strtotime($dt)));
            $model401->device_id = $slave_id;
            $model401->msn = $msn;
            $model401->cust_id = $cust_id;
            $model401->voltage_p1 = "";
            $model401->voltage_p2 = "";
            $model401->voltage_p3 = "";
            $model401->current_p1 = $curr_1;
            $model401->current_p2 = $curr_2;
            $model401->current_p3 = $curr_3;
            $model401->kwh = "";
            $model401->d_type = "401";
            $model401->save();


            /***** for voltages *****/
            echo " adding voltages values ";


            $model402 = new MdcmetersData();
            //$model402->load(Yii::$app->request->post());
            $model402->data_date_time = date('Y-m-d H:i:s', strtotime('+10 minutes', strtotime($dt)));
            $model402->device_id = $slave_id;
            $model402->msn = $msn;
            $model402->cust_id = $cust_id;
            $model402->voltage_p1 = $vol_1;
            $model402->voltage_p2 = $vol_2;
            $model402->voltage_p3 = $vol_3;
            $model402->current_p1 = "";
            $model402->current_p2 = "";
            $model402->current_p3 = "";
            $model402->kwh = "";
            $model402->d_type = "402";
            $model402->save();


            /***** for kwh *****/
            echo " adding kwh values ";

            $model403 = new MdcmetersData();
           // $model403->load(Yii::$app->request->post());
            $model403->data_date_time = date('Y-m-d H:i:s', strtotime('+15 minutes', strtotime($dt)));
            $model403->device_id = $slave_id;
            $model403->msn = $msn;
            $model403->cust_id = $cust_id;
            $model403->voltage_p1 = "";
            $model403->voltage_p2 = "";
            $model403->voltage_p3 = "";
            $model403->current_p1 = "";
            $model403->current_p2 = "";
            $model403->current_p3 = "";
            $model403->kwh = $kwh;
            $model403->d_type = "403";
            $model403->save();


        }

    }
    }

您可以看到第一个到第三个和第四个到第六个日期时间是相同的。如何准确设置日期时间?

任何帮助将不胜感激。

【问题讨论】:

  • 你没有显示你是如何设置第四个的,还要检查你是否使用了正确的变量名,而不仅仅是复制和粘贴。
  • @NigelRen 我对所有日期时间都做同样的事情。变量没问题。但我认为问题在于循环。如果我删除循环,那么日期时间就很好了
  • 查看您发布的实际 coe,您只需重复相同的代码 60 次...您的代码似乎与循环变量 $i 无关。不清楚循环中发生了什么跨度>
  • @scaisEdge 每次循环开始时都会分配相同的日期时间。这就是发生的事情
  • 您的代码。还不够......向我展示有循环 e 的操作以及您管理/保存模型/数据到 db 的部分。

标签: php datetime yii2 yii2-advanced-app


【解决方案1】:

自定义这个:

$dt = date('Y-m-d H:i:s');
echo $dt . '<br>'; //now
$min5Later = strtotime('+5 minutes', strtotime($dt));//5 min later from $dt
$min5LaterFormat = date('Y-m-d H:i:s', $min5Later);

$min10Later = strtotime('+10 minutes', strtotime($dt));//10 min later from $dt
$min10LaterFormat = date('Y-m-d H:i:s', $min10Later);

$min15Later = strtotime('+15 minutes', strtotime($dt));//15 min later from $dt
$min15LaterFormat = date('Y-m-d H:i:s', $min15Later);

for ($i = 0; $i <= 2; $i++) {
    $min5Later = strtotime('+5 minutes', strtotime($min5LaterFormat));//5 min later from $min5later
    $min5LaterFormat = date('Y-m-d H:i:s', $min5Later);
    $min10Later = strtotime('+10 minutes', strtotime($min10LaterFormat));//10 min later from $min10later
    $min10LaterFormat = date('Y-m-d H:i:s', $min10Later);
    $min15Later = strtotime('+15 minutes', strtotime($min15LaterFormat));//15 min later from $min15later
    $min15LaterFormat = date('Y-m-d H:i:s', $min15Later);

 echo $min5LaterFormat . ' | ';
 echo $min10LaterFormat . ' | ';
 echo $min15LaterFormat . ' | <br>';
}

输出:

2020-05-10 19:19:47
2020-05-10 19:29:47 | 2020-05-10 19:39:47 | 2020-05-10 19:49:47 |
2020-05-10 19:34:47 | 2020-05-10 19:49:47 | 2020-05-10 20:04:47 |
2020-05-10 19:39:47 | 2020-05-10 19:59:47 | 2020-05-10 20:19:47 |

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 2016-02-19
    • 2015-10-13
    • 2017-09-22
    • 2016-01-02
    • 2011-12-31
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多