首页 > 编程技术 > php

php数值与时间相互转换的用法示例

发布时间:2017-7-6 23:49

这篇文章主要介绍了php数值转换时间及时间转换数值用法,涉及php strtotime及date等函数实现日期的字符串格式与Unix时间戳格式转换相关操作技巧,需要的朋友可以参考下

本文实例讲述了php数值转换时间及时间转换数值用法。分享给大家供大家参考,具体如下:

 

 代码如下复制代码

echo$startime=strtotime(date("Y-m-d",time()));//当天0点时间戳

echo"
";

echo$endttime=strtotime(date("Y-m-d",time()).' 23:59:59');//当天23:59:59的INT类型时间戳

echo"
";

//把数值型转成时间字符型

$dotime="1357985479";

echodate("Y-m-d H:i:s",$dotime);//把数字型时间按格式转换成时间格

echo"
";

//输出当前时间字符串型

echostrtotime(date('Y-m-d H:i:s',time()));

echo"
";

//把数值型转成字符串型

echodate('Y-m-d H:i:s',�');

echo"
";

//把字符串型转成数值型

echostrtotime('Y-m-d H:i:s');

//echo "
";

//最近七天

echostrtotime("-7 days")

 

运行结果如下:

 

 代码如下复制代码

1495065600

1495151999

2013-01-12 10:11:19

1495073470

2013-01-12 10:11:19

1494468670

 

本文介绍了php redis实现对200w用户的即时推送,非常实用,有兴趣的同学快来看看吧

怎么实现对200w用户的即时推送,这个推送可以理解为调用第三方的接口,push,sms之类的东西。

当时先写了一个demo 直接读取DB然后单个推送,结果。。可想而知

于是设计一套基于redis+php多进程的方案,用着还不错而去扩展性蛮高的,故分享之。

=============================================

具体的逻辑如下:(无视我的字体)

其实这里还可以优化的,我的设想是如果用户数据再多一些的话,可以在redis里对数据进行分割采取多List,每一个List对应多个php进程这样会更快。

下面是我实现的具体代码:

主管理脚本:应用时启动这个即可。

 

 代码如下复制代码

<?php    //push推送配置 注:使用前请确认log文件为空    2016-04-12

include_once(dirname (__FILE__)."/../../config.inc.php");

//if(exec('ps aux | grep redis_push.php | grep -v grep | wc -l') != 0) goto check;

import('push.class.php');

import('Redis.class.php');

  

$time=time();

$data=array("apikey"=>'xxxx',"secret"=>'xxxx');

$push=newChannel($data);

$redis=newRedisCache($Credis['host'],$Credis['port']);

if(exec('ps aux | grep redis_push.php | grep -v grep | wc -l') != 0)gotocheck;//如果有推送任务 直接执行监控代码

  

/*PUSH配置项*/

$config=array(

 "file"=>"test.txt",

 "Title"=>"sssss",

 "Content"=>"ssssssssssssssss",

 "OpenType"=>"0", //1是 0否  是否跳转链接

 "Url"=>"",    //链接地址

 "num"=>"500",  //每次推送条数

 "s"=>"1"     //睡眠时间 (单位:秒)

);

$num= 15;     //启动进程数量

$a=$config['OpenType']==1 ?"是":"否";

$c= json_encode($config);

$info= <<<monkey

  ************ 请确认信息是否有误*10秒后启动push任务! *************

  * 文件名称  : {$config['file']};

  * 推送标题  : {$config['Title']};

  * 推送内容  : {$config['Content']};

  * 是否跳转  : {$config['OpenType']};

  * 进程数量  :$num;(如果为单进程无视此项)

  * 睡眠时间  : {$config['s']};

  * 日志目录  : /log;

  ***************************************************************\n

monkey;

echo$info;

sleep(3);

$n= 1;

while($n<=10){

 echo(10-$n++),"秒\n";

 sleep(1);

}

echo"------------------------- 任务已启动 -------------------------\n";

if($redis->Scount('push_getchannel_success')){

 echo"队列有未完成任务\n";

}else{

 $res=exec("php redis_getchannel.php {$config['file']}");//写入redis脚本

 echo$res;

}

smtp_mail('xxxx@qq.com','推送任务已开启','请实时监测,5秒后您的手机将接收到测试推送!');//推送监控 实现定时全自动推送 

echo"\n---------------- 5秒后 test 将收到测试推送消息 ----------------\n";

sleep(5);

$re=$push->BaiduPush('xxxx','xxxxx',$config['Content'],$config['Title'],Ƈ',$config['OpenType'],$config['Url'],'xxxxx',$push);

sleep(1);

echo"\n---------------- 测试推送已发出!如未收到,请及时终止程序! 10秒后正式推送!!! ----------------\n";

$m= 1;

while($m<=10){

 echo(10-$m++),"秒\n";

 sleep(1);

}

echo"\n---------------- 推送任务已经开始!请耐心等待! ----------------\n";

//下面设置是否多进程

for($i=1;$i<=$num;$i++){

exec("php redis_push.php '{$c}' > /dev/null 2>&1 &");

}

  

check:

while(1){

 if(exec('ps aux | grep redis_push.php | grep -v grep | wc -l') == 0){

  echo"push 发送完成 用时",time()-$time,"秒";

  die();

 }

 echo"当前进程数:",exec('ps aux | grep redis_push.php | grep -v grep | wc -l'),"个","\n";

 echo"当前剩余推送数量:".$redis->Scount('push_getchannel_success')."\n";

 sleep(10);

}

 

至于写入redis和具体的推送脚本这个靠自己的想象里就好了 我就不发了 嘿嘿

我的做法是具体的推送脚本在推送一定数量后会自动终止并调用自己本身。

因为在实际应用中发现php脚本在长时间运行之后会发生假死(可能是因为上下文切换的问题),所以我都是避免让php脚本长时间运行。

还有就是用户肯定不是固定的200w用户 每天都会有一个增量,我的方案是通过定时脚本每天把增量的用户整理进我自己设计的一个用户表自己管理。

ps:我把所有的脚本弄到了一个我自己整理的小的php原生框架统一管理,过段时间我发出来。

小编推荐的这篇文章介绍了PHP redis实现超迷你全文检索,非常实用,有兴趣的同学快来看看吧

情景:我们平台有好多游戏, 运营的同事在查询某一款游戏的时候, 目前使用的是html的select下拉列表的展现形式, 运营的同事得一个个去找,然后选中,耗时又费眼

效果:输入"三国"或者"国三", 将自动列出所有包含"三国"的游戏名字, 输入不限顺序; 例如输入"杀三国",仍然会将"三国杀"这款游戏找出来

实现:我用redis的集合+PHP的array_intersect()和mb系列函数, 实现了一个超迷你的全文检索功能

原理:(大道不过两三言,说穿不值一文钱,哈哈)

1、将所有的游戏名字读出来,拆分成单个汉字

2、 将这些汉字作为redis集合的键,写入redis,每个集合里的值是所有那些游戏名字中包含此汉字的游戏的id

3、当用户输入文字的时候通过ajax异步请求,将用户输入传给PHP

4、将输入的文字拆分成单个汉字, 分别找到这些汉字在redis中的集合值

5、取出来,求交集,就找到了同时包含这几个汉字的游戏的id

6、最后到数据库里查出来相应的游戏信息即可

缺点:删除数据不方便

PHP写入redis和检索的代码:

 

 代码如下 复制代码

//自动补全

  //不限输入汉字的前后顺序: 输入"国三杀" => 输出 "三国杀"

  functiongetAutoComplate()

  {

    //$word = $this->input->post('word');

    $word='三国';

    if(empty($word)) {

      exit('0');

    }

    $intWordLength= mb_strlen($word,'UTF-8');

 

    $this->load->library('iredis');

    if(1 ==$intWordLength) {

      $arrGid=$this->iredis->getAutoComplate($word);

    }else{

      $arrGid=array();

      for($i=0;$i<$intWordLength;$i++) {

        $strOne= mb_substr($word,$i, 1,'UTF-8');

        $arrGidTmp=$this->iredis->getAutoComplate($strOne);

        $arrGid=empty($arrGid) ?$arrGidTmp:array_intersect($arrGid,$arrGidTmp);//求交集,因为传入的参数个数不确定,因此不能直接求交集

      }

    }

 

    $arrGame=$this->gamemodel->getGameNameForAutoComplate($arrGid);

    // var_dump($arrGame);exit;

    $jsonGame= json_encode($arrGame);

    exit($jsonGame);

  }

 

  //自动补全, 建立索引

  functionsetAutoComplate()

  {

    $arrGame=$this->gamemodel->getAllGameNameForAutoComplate();

    $arrIndex=array();

    foreach($arrGameas$gid=>$gname) {

      $intGnameLength= mb_strlen($gname,'UTF-8');

      for($i=0;$i<$intGnameLength;$i++) {

        $strOne= mb_substr($gname,$i, 1,'UTF-8');

        $arrIndex[$strOne][] =$gid;

      }

    }

     

    $this->load->library('iredis');

    foreach($arrIndexas$word=>$arrGid) {

      foreach($arrGidas$gid) {

        $this->iredis->setAutoComplate($word,$gid);

      }

    }

     

  }

 

操作redis的方法

 

 代码如下 复制代码

//自动补全功能

  publicfunctionsetAutoComplate($key,$value)

  {

    $youxikey='youxi_'.$key;

    $this->sAdd($youxikey,$value);

  }

 

  //自动补全功能

  publicfunctiongetAutoComplate($key)

  {

    $youxikey='youxi_'.$key;

    return$this->sMembers($youxikey);

  }

 

本文分享了浅谈php中变量的数据类型判断函数,非常有用,不会的同学可以参考一下本文

在php中我们可以通过  var_dump()打印出变量的类型和值。同时我们可以通过一些函数判断变量的类型。如果只是想得到一个变量的数据类型,可以使用gettype()函数,gettype($t)  返回$t的数据类型的字符串,要是$t不属于php中8种基本变量类型,返回"unknow  type"。我们还可以通过is_type系类函数直接判断是否为type类型函数,是的话返回true ,不是返回false。

如:


is_bool()        是否为布尔型
is_int()         是否为整型
is_float()       是否为浮点型
is_string()      是否为字符串型
is_array()       是否为数组型
is_object()      是否为对象类型
is_resource()    是否为资源类型
is_null()        是否为空
is_scalar()      是否为标量型,即是一个整型 浮点型 布尔型 或者字符串型。
is_numeric()     是否为任何类型的数字或者数字字符串
is_callable()    是否是有效函数名

本文介绍了PHP检测数据类型的几种方法,非常实用,有兴趣的同学快来看看吧

在JavaScript中,使用typeof可以检测基本数据类型,使用instanceof可以检测引用数据类型。在PHP中,也有检测数据类型的方法,具体如下:

1、输出变量的数据类型(gettype)

 

 代码如下 复制代码

<?php

 

   $arry=array('a','b','c');

 

   echogettype($arry);//array

 

 ?>

 

2、输出变量的数据类型、包含的数量以及具体内容(var_dump)

查看源码打印代码帮助

 

 代码如下 复制代码

<?php

 

  $str='hello world';

 

  var_dump($str);//string(11) "hello world" 

 

?>

 

3、检测某个变量是否是指定的数据类型(is_array、is_string、is_int、is_double等),如果为真返回1,如果为假返回空。

查看源码打印代码帮助

 

 代码如下 复制代码

<?php

 

  $num= 123;

 

  if(is_array($num)){

 

    echo'这是一个数组';

 

  }elseif(is_string($num)){

 

    echo'这是一个字符串';

 

  }elseif(is_int($num)){

 

    echo'这是一个整数';

 

  }elseif(is_double($num)){

 

    echo'这是一个浮点数';

 

  }

 

?>

 

或许你的朋友正在寻找这个问题的答案,赶紧分享给他吧!

标签:[!--infotagslink--]

您可能感兴趣的文章: