date(w) 输出后对应的周几不对的问题

本文介绍了PHP中使用date函数获取指定日期对应的星期几时的一个常见错误及其修正方法。通过对比错误与正确的代码示例,解释了如何利用strtotime函数转换日期字符串为时间戳,从而得到准确的星期几。

错误写法:date("w","2017-07-15");    输出后对应的周几  不对


后改成: date("w",strtotime('2017-07-15'));   正确       


date(format,timestamp);

timestamp 可选。规定整数的 Unix 时间戳。默认是当前的本地时间(time())

我要你修复我的代码 你怎么听不明白呢 这是我的代码: public function getYudingInfo($info){ $has_yuding_order = 0; // 设置时区 date_default_timezone_set('Asia/Shanghai'); // 获取当前日期 $currentDate = date('Y-m-d'); // 初始化空数组用于存储日期、营业状态、营业时间段和价格信息 $datas = []; $businessHoursArray = $info['price_setting']; // dump($businessHoursArray);die; // 遍历接下来七天的日期列表 // if($type == 'today'){ // $maxDay = 1; // }else{ $maxDay = 7; // } for ($i = 0; $i < $maxDay; $i++) { $nextDate = date('Y-m-d', strtotime($currentDate . ' + ' . $i . ' day')); $nextDateStr = $nextDate; $weekday = date('w', strtotime($nextDate)); // 判断是否为今天或明天 if ($i == 0) { $nextDate = "今天"; } elseif ($i == 1) { $nextDate = "明天"; } // dump($nextDateStr);die; // 根据周几查找球馆营业字段的内容 $end_arr = []; foreach($businessHoursArray as $yingye_params){ if($yingye_params['week'] == $weekday){ //每一天都有设置 只是有的价格是? 就是不营业的那个时间段 //拿到这天属于营业的周几 的数据 // 获取营业时间段内设置的价格数组 foreach ($yingye_params['changdi_list'] as &$changdi) {//每个场地 foreach ($changdi['time_list'] as &$timeData) {//每个场地下 每个时间段 // dump($timeData);die; if($timeData['price'] == '?'){ //没设置价格 $timeData['has_yuding'] = 0;//没价格 = 没上架 , 也就不可能被预定 }else{ //设置了价格 就要去查询 这个时间09:00 查询比对 今天年-月-日,时:分 //对比数据库赛事表 是否有正在进行的赛事 有则返回 被预定 // 赛事表 : free_event_list 字段如下 // `start_time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '开始时间', // `end_time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '结束时间', // `game_date` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '比赛日期', // `event_status` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '赛事状态 : 进行中1,已完赛2', // 创建一个 DateTime 对象 //注释之前时间计算方式 //$time = new \DateTime($timeData['time']); //都增加1小时结束 // 使用 modify 方法增加一个小时 //$time->modify('+1 hour'); // 格式化并输出时间 //$end_time = $time->format('H:i');//10:00 因为就是09:00 - 10:00 //var_dump($timeData); //exit; $time_arr = explode('-',$timeData['time']); // dump($changdi);die; $has_yuding = Db::name('free_event_list') ->where('ballhouse_id', '=', $info['aid']) // 确保是这个场馆的赛事 ->where('game_date', '=', $nextDateStr) // 确保是今天的赛事 ->where('start_time', '=', $time_arr[0]) // 开始时间小于或等于指定时间 ->where('end_time', '=', $time_arr[1]) // 结束时间大于或等于指定时间 ->where('changdi_name',$changdi['name']) ->where('event_status', '=', '1')->order("aid desc")->find(); // 赛事状态为进行中 $timeData['has_yuding'] = 0;//默认没被预定 if($has_yuding){ //再查询这笔订单 $has_real_o = Db::name('order')->where("game_id",$has_yuding['aid'])->find(); if($has_real_o){ if($has_real_o['pay_status'] == 1){ // exception('您手慢了一步~此时间段场馆已有他人预定 请刷新重试'); $timeData['has_yuding'] = 1;//已被预定 } } } // dump($has_yuding);die; // $timeData['has_yuding'] = $has_yuding ? 1 : 0; } //修改球馆资料接口需要用到这个字段 一旦有预定 就不允许修改 if($timeData['has_yuding'] > 0){ $has_yuding_order++; } $timeData['this_time_big_nowtime'] = 0; //额外 如果时间是今天现在 以前的时间 就 强制修改为 已被预定 //例如现在时间 9:35 , 当前v的time是 9:00 , 10:00 $v_time = strtotime($nextDateStr.' '.$timeData[0]); // dump($nextDateStr.' '.$timeData['time']);die; $now_t = time(); if($now_t > $v_time){ $timeData['this_time_big_nowtime'] = 1;//超过现在了 $timeData['has_yuding'] = 1;//强制修改为 已被预定 } }unset($timeData); }unset($changdi); //一个场地的情况 ⬇️ // dump($changdi['time_list']);die; foreach ($yingye_params['changdi_list'] as &$gv){ // dump($gv);die; $has_ding_num = 0;//预定数量 $can_ding_num = 0;//可预定数量 $no_set_num = 0;//未设置数量 //某个场地是否可以被预定状态 $zongTnum = count($gv['time_list']);//总设置的时间段数量 // dump($zongTnum);die; foreach ($gv['time_list'] as $cv){ if($cv['price'] == '?'){ //不营业 不可以预定 $no_set_num++; }else{ if($cv['status'] == 0){ $xiajia++; }else{ //代表可预定 查询这个可预定数量 决定 定满了 if($cv['has_yuding'] == 1){ // dump($cv);die; $has_ding_num++; }else{ $can_ding_num++; } } } }unset($cv); if($no_set_num == $zongTnum){ $gv['can_ding_num'] = -1;//不可以预定 } if($has_ding_num == $zongTnum){ $gv['can_ding_num'] = 0;//预定满了 不可以预定 } if($can_ding_num > 0){ $gv['can_ding_num'] = 1;//可以预定 } }unset($gv); //再次循环 看是否 某天可以预定 预定满了 不营业的状态 $end_keyi_yuding = 0; $end_man_yuding = 0; $end_no_yuding = 0; $zongchangdi_num = count($yingye_params['changdi_list']); foreach ($yingye_params['changdi_list'] as $gv){ if($gv['can_ding_num'] == -1){ $end_no_yuding++; } if($gv['can_ding_num'] == 0){ $end_man_yuding++; } if($gv['can_ding_num'] == 1){ $end_keyi_yuding++; } }unset($gv); if($end_no_yuding == $zongchangdi_num){ $can_ding_num = -1;//不可以预定 } if($end_man_yuding == $zongchangdi_num){ $can_ding_num = 0;//预定满了 不可以预定 } if($end_keyi_yuding > 0){ $can_ding_num = 1;//可以预定 } $aaa['date'] = $nextDate; $aaa['date_str'] = $nextDateStr; $aaa['can_yuding'] = $can_ding_num;//-1不营业,0预定满了,1可以预定 // $aaa['week_str'] = $yingye_params['name'];//不对 重新根据 date_str 得到周几 if($nextDate == '今天' || $nextDate == '明天'){ $week_str = $nextDate; }else{ $week_str = self::getWeek($nextDateStr); } $aaa['week_str'] = $week_str; $aaa['week_index'] = $yingye_params['week']; $aaa['list'] = $yingye_params['changdi_list']; unset($yingye_params); $datas[] = $aaa; } } } // dump($datas);die; return ['datas'=>$datas,'has_yuding_order'=>$has_yuding_order]; } public function getWeek($date){ $weekdays = array( "日", "一", "二", "三", "四", "五", "六", ); // 获取指定日期的星期几,并将其转换为中文 $weeknum = date("w", strtotime($date)); // 获取星期几的数字表示 $chinese_weekday = $weekdays[$weeknum]; // 将数字转换为中文星期 return '周'.$chinese_weekday; }
最新发布
10-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值