php l练习(写着玩)
- 需求:假设今天24号,今天发表的评论显示几小时前发布,23号发布的显示 昨天几点发布的,再往前的就直接显示年月日。
date_default_timezone_set('PRC');
// $create_time = 1561377423;
$create_time = 1561219392;
// $create_time = 1561132890;
//最又那种形式:
//获取凌晨时间戳
$start = date('Y-m-d');
$start_time = strtotime($start);
//前一天凌晨时间戳
$last_start_time = strtotime(date('Y-m-d', strtotime('-1 day')));
//数据库中发表评论的时间和凌晨时间对比
if($create_time < $start_time && $create_time > $last_start_time){
//说明不是在今天发表的评论
$lastOneDay = date('H:i:s',$create_time);
echo '发表于--昨天'.$lastOneDay;
}elseif($create_time >= $start_time){
$time_diff = time() - $create_time;
$time_diff = round($time_diff / 3600);
echo 'publish before'.$time_diff,'hours';
}else{
echo 'publish '.date('Y-m-d H:i:s',$create_time);
}计算时间差
- 接口本来是默认返回4篇文章显示在快应用里, 现在需要改一下. 需求: 前端不改代码, 后端每天自动添加两条数据, 就是说保留之前接口返回的数据, 然后每天再自动添加2 条(第一天:4 条 第二天: 6条 第三天: 8条 以此类推), 开始没想出来, 后来突然发现其实就是limit('4')改成limit($limit), 然后让$limit 每天自动递增就OK了. 其实重点在于按天递增. 他和之前的计算发表时间不同, 发表时间是判断数据库存的时间(addtime)是不是在一天的范围内. 而这个是按照前端请求接口的时间是不是在一天范围内.
date_default_timezone_set('PRC');
//判断前端请求接口的时间
$firstTime = 1567008000; //默认把2019/8/29作为第一天(接口第一次请求的时间), 然后之后每天接口请求的时候,自动把$limit + 2 (如果是一天内多次请求接口, limit不变)
$currentTime = time();
$days = floor(($currentTime-$firstTime)/(3600*24)); //计算距离第一次接口请求过了多少天. 那么就把$limit 加上天数, 就是现在要返回的数据量
echo $days, '<hr>';
$limit = 4; //第一次接口请求的时候, 默认返回4条数据
$limit += $days;
echo $limit; - 需求: 每天只查询一次数据库.目前想到的有两种实现方法:
(1) 在程序里设置每天定时查询一次数据库//简单写一下
if(date('H:i:s') == 08:00:00){
//todo e.g:select db
}
//continue...(2) 每天的第一次查询就是当天的唯一一次查询数据库(code里面的代码都是在actionTest方法中, 添加的时候没注意, 跑偏了)
public static $temp_city = null; //临时变量, 用来接收数据表中查询的city_list, 判断为null, 采取查询数据库
public static $call_time = null; //记录前端每天第一次调用的时间
public function actionTest()
{
//每天只查询一次获取城市list的接口和一次citylist数据表, 如果聚合有更新可以直接添加到数据库
if(self::$call_time === null){
self::$call_time = time();
self::$temp_city = WeihaoCity::find()->select('city, cityname')->where(['status'=>0])->all(); //第一次查询
$r = $this->curlGet($url); //调用curl请求接口
//比较聚合数据和数据库的数据是否一致, 不一致则更新数据库
}
}
//比较$call_time 和 之后调用接口的时间进行比较是不是同一天, 如果是同一天则不查询数据库, 否则查询
if(date('Y-m-d', self::$call_time) == date('Y-m-d')){
//说明在同一天, 什么都不用做
} else{
self::$call_time = time(); //把当前时间重新赋值给$call_time
self::$temp_city = WeihaoCity::find()->select('city, cityname')->where(['status'=>0])->all(); //每天的第一次查询
$r = $this->curlGet($url);
}
//比较数据库的数据和聚合的数据是不是一样的, 如果不一样那么更新数据库的数据, 否则不需更新
$tmp = [];
$r = json_decode($r, true);
if(!empty(self::$temp_city)){
foreach (self::$temp_city as $k=>$v){
$tmp[] = $v['city'];
}
} foreach($r['result'] as $k=>$v){
if(!in_array($v['city'], $tmp)){
$insert = new WeihaoCity();
$insert->city = $v['city'];
$insert->cityname = $v['cityname'];
$insert->addtime = time();
if(!$insert->save()){
return $insert->errors;
}
self::$temp_city = WeihaoCity::find()->select('city, cityname')->where(['status'=>0])->all();
}
}有几点注意一下: (1) in_array() 第二个参数不能是多维数组, 必须要把多维数组变成一维数组. 不会递归判断的.
(2) json_decode() 他的作用是把json对象转换成数组(第二个参数为true的情况下), 但是第一个参数不可以是数组(也是第二个参数为true的情况), 如果传入一个数组, 那么返回的结果将是空数组.
(3) yii中使用new model 添加数据的时候, 如果是遍历循环插入数据的情况, 那么要注意, new model 的操作一定要在循环体中执行, 如果在循环体外面执行, 那么最终插入数据库的记录只有遍历的最后一条数据.
php l练习(写着玩)的更多相关文章
- python写机器人玩僵尸骰子
python写机器人玩僵尸骰子由Al Sweigart用python发布注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwithpy ...
- c# 写着玩的,两个Task并发,一个写队列一个读队列的异常情况
class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); publ ...
- 打印pid,写着玩。
#include <stdio.h> #include <string.h> #include <dirent.h> #include <limits.h&g ...
- Springboot+WebSocket+Kafka(写着玩的)
闹着玩的来源:前台发送消息,后台接受处理发给kafka,kafka消费者接到消息传给前台显示.联想到websocket. 最终效果如图: 页面解释: 不填写内容的话,表单值默认为Topic.Greet ...
- 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...
- 自己写着玩的一个天气APP
打开的界面: 向上滑动,进入主界面: 省份界面: 城市界面: 加载天气界面: 显示天气界面: 侧滑,显示地区,然后根据天气来显示一首诗句(晴,多云,雪,雨什么的): 第一次启动App的时候才会加载数据 ...
- 写着玩的bash脚本
#!/bin/bash function strealingManu { pwdfolder=`pwd` for var in "$@" do man 1 $var > $p ...
- = =用createJS写个flyppyPeople
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 最近flyppybird很流行啊,今天中午闲着没事干,就用现有的素材写了个flyppyPeople,因为角色是个人,所以就叫People啦 ...
- React自己写的一个地图小组件
由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...
随机推荐
- JAVA验证
1.一个JAVA类只能有一个主类. 2.main()方法返回值改为int,不能运行 3.变量作用域有限 实例: 4.数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储 ...
- c++学习笔记之类和对象(二、构造函数和析构函数)
1.构造函数(Constructor):在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行. 这种特殊的成员函数就是构造函 ...
- 测试基础_<一>
1: 过程决定质量, 测试过程贯穿整个软件开发声明周期; 2: 测试过程和开发过程在整个开发周期相辅相成; 3: 测试过程是对整个开发过程的验证, 二者互相依赖 4: 测试过程是整个测试活动中一个至关 ...
- selenium与页面交互
selenium提供了许多API方法与页面进行交互,如点击.键盘输入.打开关闭网页.输入文字等. 一.webdriver对浏览器提供了很多属性来对浏览器进行操作,常用的如图: get(url).qui ...
- CF 403D Beautiful Pairs of Numbers
The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...
- 安装PIG
下载Pig 能够执行在Hadoop 0.20.* http://mirror.bit.edu.cn/apache/pig/pig-0.11.1/pig-0.11.1.tar.gz 也能够依据你的Had ...
- Django 使用request获取浏览器发送的参数(Django编程-5)
1.url:需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P url(r'^index/(?P& ...
- 多线程编程-- part5.1 互斥锁之非公平锁-获取与释放
非公平锁之获取锁 非公平锁和公平锁在获取锁的方法上,流程是一样的:它们的区别主要表现在“尝试获取锁的机制不同”.简单点说,“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待):而 ...
- Nginx做代理路由时,不转发http的header问题
从header里面拿不到 TX_XID这种类型的字段, Nginx 会默认忽略含有 “_” 的 header 参数,而 TX_XID值的参数名恰好含有 “_” 符号,需要手动开启转发. 在 nginx ...
- mysql的auto-rehash简介
今天在看mysql的配置文件的时候,发现有"auto-rehash"不明白什么意思,在此记录一下,auto-rehash是自动补全的意思,就像我们在linux命令行里输入命令的时候 ...