我有各种用户存储在数据库中。我需要检查每个用户的日期并将今天的日期与数据库中的日期进行比较,如果今天是数据库中日期的第 30 天,则执行curl。以下是我的代码public function repeatPayment(){    //return "hi22";    $users=Payment::all();    foreach ($users as $user)    {        $trans_id = $user->transactionid;        $clinicid = $user->clinicID;        $last_transaction_date = $user->updated_at;        echo $last_transaction_date."<br>";        if (strtotime($last_transaction_date) < strtotime('-30 days')) {            echo "hello";        }        $payment = array(            "MerchantID"=> "0000000001",            "Login"=> "API0000000001",            "Password"=> "Temp1234!",            "NewExpDate"=> "102020",            "Amount"=> "29.99",            "Token"=>$trans_id,            "StandardEntryCode"=> "string",            "AuthOnly"=> false        );                $post_field = json_encode($payment);        // var_dump($post_field);        // die();        $ch = curl_init();        $headers = array(            "Content-type: application/json",            "Cache-Control: no-cache",        );        curl_setopt($ch, CURLOPT_URL,"https://api.securepds.com/2.0/payments.svc/JSON/SubmitTokenPayment");        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_POSTFIELDS,$post_field);        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                $server_output = curl_exec($ch);        curl_close ($ch);        $payment_id=  json_decode($server_output,true);        $newTransId= new CronJob;        $newTransId->clinic_id = $clinicid;        $newTransId->tranascation_id = $payment_id["Confirmation"];        $newTransId->transaction_date = date('d/m/Y');        $newTransId->save();    }}
                    
                    
                3 回答
                            森栏
                            
                                
                            
                        
                        
                                                
                    TA贡献1810条经验 获得超5个赞
我想添加一个答案,因为我认为到目前为止的答案对于解决一个简单的问题来说有点太多了。
$user->updated_at字段是一个 Carbon 日期实例,因此$last_transaction_date也是。Carbon 有一个函数diffInDays()可以给你提供今天和给定日期之间的天数差异。所以对于OP来说,我相信这样的事情会更简单。
if( $last_transaction_date->diffInDays() > 30 ) echo "more than 30 days"
                            梦里花落0921
                            
                                
                            
                        
                        
                                                
                    TA贡献1772条经验 获得超6个赞
假设您在 MySQL 和 Php 配置中具有相同的时区和日期格式。下面是可以完成您的工作的代码片段:
$datetime1 = new DateTime('2020-06-15');
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
$days_diff = intval($interval->format('%a'));
if($days_diff > 30 ){
//Do your stuffs
}
DateTime 是处理时区和夏令时的更好方法。
                            吃鸡游戏
                            
                                
                            
                        
                        
                                                
                    TA贡献1829条经验 获得超7个赞
您可以按如下方式使用 Carbon:
if (30 - ((new \Carbon\Carbon($last_transaction_date, 'UTC'))->diffInDays()) < 0) {
    echo "The date is older than 30 days";
}或者,如果您只想检查是否是一天的开始,那么使用 Carbon 进行检查相当容易endOfDay():
if( $last_transaction_date->endOfDay->diffInDays() > 30 ){
   echo "older than 30 days";
}- 3 回答
 - 0 关注
 - 203 浏览
 
添加回答
举报
0/150
	提交
		取消
	