• 需求:假设今天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练习(写着玩)的更多相关文章

  1. python写机器人玩僵尸骰子

    python写机器人玩僵尸骰子由Al Sweigart用python发布注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwithpy ...

  2. c# 写着玩的,两个Task并发,一个写队列一个读队列的异常情况

    class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); publ ...

  3. 打印pid,写着玩。

    #include <stdio.h> #include <string.h> #include <dirent.h> #include <limits.h&g ...

  4. Springboot+WebSocket+Kafka(写着玩的)

    闹着玩的来源:前台发送消息,后台接受处理发给kafka,kafka消费者接到消息传给前台显示.联想到websocket. 最终效果如图: 页面解释: 不填写内容的话,表单值默认为Topic.Greet ...

  5. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩

    百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...

  6. 自己写着玩的一个天气APP

    打开的界面: 向上滑动,进入主界面: 省份界面: 城市界面: 加载天气界面: 显示天气界面: 侧滑,显示地区,然后根据天气来显示一首诗句(晴,多云,雪,雨什么的): 第一次启动App的时候才会加载数据 ...

  7. 写着玩的bash脚本

    #!/bin/bash function strealingManu { pwdfolder=`pwd` for var in "$@" do man 1 $var > $p ...

  8. = =用createJS写个flyppyPeople

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 最近flyppybird很流行啊,今天中午闲着没事干,就用现有的素材写了个flyppyPeople,因为角色是个人,所以就叫People啦 ...

  9. React自己写的一个地图小组件

    由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...

随机推荐

  1. JAVA验证

    1.一个JAVA类只能有一个主类. 2.main()方法返回值改为int,不能运行 3.变量作用域有限 实例: 4.数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储 ...

  2. c++学习笔记之类和对象(二、构造函数和析构函数)

    1.构造函数(Constructor):在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行. 这种特殊的成员函数就是构造函 ...

  3. 测试基础_<一>

    1: 过程决定质量, 测试过程贯穿整个软件开发声明周期; 2: 测试过程和开发过程在整个开发周期相辅相成; 3: 测试过程是对整个开发过程的验证, 二者互相依赖 4: 测试过程是整个测试活动中一个至关 ...

  4. selenium与页面交互

    selenium提供了许多API方法与页面进行交互,如点击.键盘输入.打开关闭网页.输入文字等. 一.webdriver对浏览器提供了很多属性来对浏览器进行操作,常用的如图: get(url).qui ...

  5. CF 403D Beautiful Pairs of Numbers

    The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...

  6. 安装PIG

    下载Pig 能够执行在Hadoop 0.20.* http://mirror.bit.edu.cn/apache/pig/pig-0.11.1/pig-0.11.1.tar.gz 也能够依据你的Had ...

  7. Django 使用request获取浏览器发送的参数(Django编程-5)

    1.url:需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P url(r'^index/(?P& ...

  8. 多线程编程-- part5.1 互斥锁之非公平锁-获取与释放

    非公平锁之获取锁 非公平锁和公平锁在获取锁的方法上,流程是一样的:它们的区别主要表现在“尝试获取锁的机制不同”.简单点说,“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待):而 ...

  9. Nginx做代理路由时,不转发http的header问题

    从header里面拿不到 TX_XID这种类型的字段, Nginx 会默认忽略含有 “_” 的 header 参数,而 TX_XID值的参数名恰好含有 “_” 符号,需要手动开启转发. 在 nginx ...

  10. mysql的auto-rehash简介

    今天在看mysql的配置文件的时候,发现有"auto-rehash"不明白什么意思,在此记录一下,auto-rehash是自动补全的意思,就像我们在linux命令行里输入命令的时候 ...