php日期格式详细说明(1/2)

 更新时间:2016年11月25日 15:11  点击:1696
PHP中所有函数都是UNIX纪元的,即从1970年1月1日开始的。日期是从这个时候开始的秒数。当一个函数调用从这时候计的秒数时,就把它当作(times****p)时间戳。

本地时间函数
1. string date(string format,inieger times****p)
该函数返回一个表示时间的字符串,是由string format 控制的。
如:

 代码如下 复制代码
<?
print(date("y年 m月d日");//输出当前,年月日.
print(date("y年 m月d日",60*60*24*365*10);//输出1980年1月1日.
?>

也许你会问,怎麽没有times****p呢?若times****p为空时,或不写时,表示使用当前时间一刻times****p.
表示年份的控制符: y---四位的年份 y---两位的年份
表示月份的控制符: m---从1-12的月份 f---英文月份名 m---简写的月份名
表示日号的控制符: d---前面有0的月份中日期 j--前面没有0的日号
表示星期的控制符: l--英文星期 d--简写的星期
表示小时的控制符: h--从1到12小时 h---从0到23的小时
表示上下午的控制符 a ---am或pm a---am或pm
表示分钟的控制符: i---取值00-59
表示一年中第多少天: z--一年中的第多少天
2. array getdate(integer times****p)
该函数返回一个矩阵.
如:

 代码如下 复制代码
<?
$current_date=getdate();
print($current_date("hours"));
print($current_date("minutes");
print($current_date("seconds");
?>


说明:
元素 描述
hours 24小时格式的小时
mday 月份中日期
minutes 分钟
mon 数字形式的月份
month 月份全称
seconds 秒数
wday 从0到6的数字形式的星期几
weekday 星期几的名称
year 年份
0 时间戳即从1970年1月1日到现在的秒数
yday 一年中数字形式的日期
3. boolean checkdate(integer month,integer day,integer year)
该函数检查日期是否合法.如:

 代码如下 复制代码
<?
if(checkdate(2,29,1980))
print("日期合法!n");
?>

 

 

先来看一个session实例

 代码如下 复制代码

function getsessiondata ($session_name = 'php教程sessid', $session_save_handler = 'files') {
    $session_data = array();
    # did we get told what the old session id was? we can't continue it without that info
    if (array_key_exists($session_name, $_cookie)) {
        # save current session id
        $session_id = $_cookie[$session_name];
        $old_session_id = session_id();
       
        # write and close current session
        session_write_close();
       
        # grab old save handler, and switch to files
        $old_session_save_handler = ini_get('session.save_handler');
        ini_set('session.save_handler', $session_save_handler);
       
        # now we can switch the session over, capturing the old session name
        $old_session_name = session_name($session_name);
        session_id($session_id);
        session_start();
       
        # get the desired session data
        $session_data = $_session;
       
        # close this session, switch back to the original handler, then restart the old session
        session_write_close();
        ini_set('session.save_handler', $old_session_save_handler);
        session_name($old_session_name);
        session_id($old_session_id);
        session_start();
    }
   
    # now return the data we just retrieved
    return $session_data;
}


 

再看session原理
一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理。
这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变。

1.在php中如何操作session:
session_start();   //使用该函数打开session功能
$_session       //使用预定义全局变量操作数据
使用unset($_session['key']) //销毁一个session的值
简单地操作,一切都是由服务器实现;由于处理在后台,一切看起来也很安全。但是session采用什么样机制,又是怎样被实现,并且如何来保持会话的状态的呢?

2.session实现与工作原理
浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢?
这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字,
或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上
由服务器为它生成的session_id.
简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,
浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。
以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。
如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期
时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。
下面介绍一下session的存储机制,默认的session是保存在files中,即以文件的方式保存session数据。在php中主要根据php.ini的配置session.save_handler
来选择保存session的方式。
这里顺便说明一下,如果要做服务器的lvs,即多台server的话,我们一般使用memcached的方式session,否则会导致一些请求找不到session。
一个简单的memcache配置:
session.save_handler = memcache
session.save_path = "tcp://10.28.41.84:10001"
当然如果一定要使用files文件缓存,我们可以将文件作nfs,将所有的保存session文件定位到一个地方。
刚才讲返回给用户的session-id最终保存在内存中,这里我们也可以设置参数将其保存在用户的url中。

3.实例问题
现有系统a,b; 假设a系统是可以独立运行的web系统,即可以和浏览器直接处理session, b系统是基于mobile的,需要调用a系统的功能接口,
在保持a不改变的情况下,即登陆验证,session存储都不变的情况下,b系统能处理前端用户的请求。
这里提供的方案是使用php实现
在用户登陆成功后,将保存的session的session-id返回给b系统,然后B系统每次请求其他接口都带session_id。
A系统在session_start前加上session_id(session_id);
这样b系统就能安全的调用a


session函数还有

session_cache_expire — return current cache expire
session_cache_limiter — get and/or set the current cache limiter
session_commit — alias of session_write_close
session_decode — decodes session data from a string
session_destroy — destroys all data registered to a session
session_encode — encodes the current session data as a string
session_get_cookie_params — get the session cookie parameters
session_id — get and/or set the current session id
session_is_registered — find out whether a global variable is registered in a session
session_module_name — get and/or set the current session module
session_name — get and/or set the current session name
session_regenerate_id — update the current session id with a newly generated one
session_register — register one or more global variables with the current session
session_save_path — get and/or set the current session save path
session_set_cookie_params — set the session cookie parameters
session_set_save_handler — sets user-level session storage functions
session_start — initialize session data
session_unregister — unregister a global variable from the current session
session_unset — free all session variables
session_write_close — write session data and end session

 代码如下 复制代码
<! doctype html public "-//w3c//dtd html 4.0//en"
"http://www.w3.org/tr/rec-html140/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>ajax用户注册演示程序</title>
<script language="网页特效" type="text/网页特效">
<!--
//创建函数
function createxmlhttp()
{
  var request;
  var browser = navigator.appname;
  //使用ie,则使用xmlhttp对象
  if(browser == "microsoft internet explorer")
  {
    var arrversions = ["microsoft.xmlhttp", "msxml2.xmlhttp.4.0",
      "msxml2.xmlhttp.3.0", "msxml2.xmlhttp","msxml2.xmlhttp.5.0"];
    for (var i=0; i < arrversions.length; i++)
    {
      try
      {
 //从中找到一个支持的版本并建立xmlhttp对象
        request = new activexobject(arrversions[i]);
        return request;
      }
      catch (exception)
      {
        //忽略,继续
      }
    }
  }
  else
  {
    //否则返回一个xmlhttprequest对象
    request = new xmlhttprequest();
    if(request.overridemimetype)
    {
    request.overridemimetype('text/xml');
   }
    return request;
  }  
}
//全局xmlhttp对象实例变量
var http = createxmlhttp();
//发送请求
function chkuser()
{
  var url = "check.php教程";    //请求"checkusername" servlet
  var name = document.getelementbyid("username").value;  
  url += ("?username="+escape(name)+"&oprate=chkuser");
  http.open("get",url,true);
  http.onreadystatechange = processhttpresponse;
  http.send(null);
  return ;
}
//处理响应
function processhttpresponse()
{
  if(http.readystate == 4)
  {
    if(http.status == 200)
    {
     var xmldocument = http.responsexml;
     if(http.responsetext!="该用户名有效,可以使用!")
      {
 //返回的信息动态显示
      document.getelementbyid("showstr").style.display = "";
      document.getelementbyid("username").style.background= "#ff0000";
      document.getelementbyid("showstr").innertext = http.responsetext;
     }
      else
      {
      document.getelementbyid("username").style.background= "#ffffff";
      document.getelementbyid("showstr").style.display = "";
        document.getelementbyid("showstr").innertext = http.responsetext;
     }
    }
    else
    {
    alert("你所请求的页面发生异常,可能会影响你浏览该页的信息!");
    alert(http.status);
    }
  }
}
//检验输入密码
function chkpassword()
{
  var m=document.form1;
  if(m.password.value.length>20 || m.password.value.length<6 )
  {
    document.getelementbyid("passwordstr").style.display = "";
   document.getelementbyid("password").style.background= "#ff0000";
   document.getelementbyid("passwordstr").innertext = "对不起,密码必须为英文字母、数字或下划线,长度为6~20!";
   }
   else
   {
    document.getelementbyid("password").style.background= "#ffffff";
    document.getelementbyid("passwordstr").style.display = "none";
   }
}
//验证两次密码是否一致
function chkconfirmpassword()
{
   var m=document.form1;
  if (m.password.value != m.confirmpassword.value)
  {
   document.getelementbyid("confirmpasswordstr").style.display = "";
   document.getelementbyid("confirmpassword").style.background= "#ff0000";
   document.getelementbyid("confirmpasswordstr").innertext = "对不起,密码与重复密码不一致!";
  }
  else
  {
   document.getelementbyid("confirmpassword").style.background= "#ffffff";
   document.getelementbyid("confirmpasswordstr").style.display = "none";
  }
}
//验证email是否有效
function chkemail()
{
   var m=document.form1;
   var email = m.email.value; 
   //正则表达式
  var regex = /^([a-za-z0-9_-])+@([a-za-z0-9_-])+(.[a-za-z0-9_-])+/;   
  var flag = regex.test(email);        
  if(!flag)   
  {
     document.getelementbyid("emailstr").style.display = "";
   document.getelementbyid("email").style.background= "#ff0000";
   document.getelementbyid("emailstr").innertext = "对不起,邮箱地址无效!"; 
  }   
  else   
  {
     document.getelementbyid("email").style.background= "#ffffff";
   document.getelementbyid("emailstr").style.display = "none"; 
  }
  
}
//提交检查函数
function submitcheck()
{
  var m=document.form1;
  if(m.username.value.length==0)
  {
   alert("对不起,用户名必须为英文字母、数字或下划线,长度为5~20。");
   m.username.focus();
   return false;
  }
  if(m.password.value.length==0)
  {
   alert("对不起,密码必须为英文字母、数字或下划线,长度为5~20。");
   m.password.focus();
   return false;
  }
  if (m.password.value != m.confirmpassword.value)
  {
   alert("对不起,密码与重复密码不一致!");
   m.confirmpassword.focus();
   return false;
  }
  if(m.email.value.length==0)
  {
   alert("对不起,邮箱地址不能为空!!");
   m.email.focus();
   return false;
  }
  m.submit();
}
//-->
</script>
<body >
<form name="form1" method="post" action="register.php">
<h3 align="center">ajax用户注册程序</h3>
<table align="center" width="500" border="1" >
  <tr>
    <td><font color="red">*</font></td>
    <td width="100">用户帐号:</td>
    <td><input type="text" name="username" maxlength="20" style="background=#ffffff" onblur="chkuser()"></td>
    <td><div id="showstr" style="background-color:#ff9900;display:none"></div></td>
  </tr>
  <tr>
    <td><font color="red">*</font></td>
    <td>用户密码:</td>
    <td align="left"><input type="password" name="password" maxlength="22" style="background=#ffffff" onblur="chkpassword()"/> </td>
    <td><div id="passwordstr" style="background-color:#ff9900;display:none"></div></td>
  </tr>
  <tr>
    <td><font color="red">*</font></td>
    <td>确认密码:</td>
    <td><input type="password" name="confirmpassword" maxlength="20" style="background=#ffffff" onblur="chkconfirmpassword()"/></td>
    <td><div id="confirmpasswordstr" style="background-color:#ff9900;display:none"></div></td>
  </tr>
  <tr>
    <td><font color="red">*</font></td>
    <td>email:</td>
    <td><input type="text" name="email" maxlength="100"  style="background=#ffffff" onblur="chkemail()"></td>
    <td><div id="emailstr" style="background-color:#ff9900;display:none"></div></td>
  </tr>
</table>
<div align="center">
 
   <input type="button" name="ok" value=" 确定 " onclick="submitcheck()">
   <input type="reset" name="reset" value=" 取消 ">
  </form>
</div>
</body>
</html>

reg.php检测程序

 代码如下 复制代码

<?php
header("content-type:text/html;charset=gb2312");
@mysql教程_connect('localhost','root','ebaeba') or die("数据库教程服务器连接失败");
@mysql_select_db("test") or die("数据库不存在或不可用");

 

$uname = $_get['username'];
//下面进行数据库查询  查找是不是有这一个用户
//如果没有查找到这个用户名

 

$sql="select * from t1 where name='".$uname."'";
$query=mysql_query($sql);
$row=mysql_fetch_object($query);

if(strlen($uname)<6||strlen($uname)>20)
{
   $msg="用户名必须是6至20个字符.";
}
else
{
 
   if($row==false)
   {
      $msg="该用户名有效,可以使用!";
   }
   else
   {
      $msg="对不起,此用户名已经存在,请更换用户名注册!";
   }
}
echo $msg ;
?>

要截取的字符串, $num要截取的长度, 返回截取的字符串
 代码如下 复制代码
public function substrgb($in,$num)
    {
      //$num=16;
      $pos=0;
      $bytenum=0;
      $out="";
      while($num){
   
    $c=mb_substr($in,$pos,1,"euc-jp");
    if($c==" ") break;
    if(strlen($c)==1){
      $pos++;
      $bytenum++;
      if($bytenum>$num) break;
      $out.=$c;                       
    }
    else
      {
        $pos++;
        $bytenum=$bytenum+2;
        if($bytenum>$num) break;
        $out.=$c;                  
      }
      }
      return $out;
    }
在WEB开发中经常会用到cookie来帮我们处理一些小问题,下面我们就写了一个简单的关于php cookie函数的设置与删除cookie的代码。


/**
  * 设置cookie
   * n 名称
   * c 值
   * e 有效期 0 默认 一个月 1 关闭立即失效
   */
 

 代码如下 复制代码
function w_cookie($n, $c, $e = 0,$isdes=1)
 {
   if($isdes==1){$c=endes($c,deskey);}
      $exp = time() + 3600 * 24 * 30;
      if($e == 0)
     {
          setcookie($n, $c, $exp,"/");
     }
     else
     {
      setcookie($n, $c,0,"/");
      }
 }


 
 //关闭cookie方法
 

 代码如下 复制代码
 w_cookie('bb', 'www.111cn.net', $e = 0,$isdes=1);


 
 //开启设置cookie方法

 代码如下 复制代码
 
 w_cookie('bb', 'www.111cn.net', $e = 1,$isdes=1);


?>

[!--infotagslink--]

相关文章

  • Json格式详解

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成...2021-11-05
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • php计算两个日期相差天数的方法

    本文实例讲述了php计算两个日期相差天数的方法。...2015-03-15
  • vue开发之moment的介绍与使用

    moment是一款多语言支持的日期处理类库, 在vue中如何使用呢?这篇文章主要给大家介绍了关于vue之moment使用的相关资料,需要的朋友可以参考下...2021-05-13
  • 非常全面的php日期时间运算汇总

    实例讲解之前,先来介绍几个核心函数: mktime 函数 mktime() 函数返回一个日期的 Unix 时间戳。 参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。 参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。...2015-11-08
  • C#实现将字符串转换成日期格式的方法

    这篇文章主要介绍了C#实现将字符串转换成日期格式的方法,涉及C#操作时间及字符串的相关技巧,非常简单实用,需要的朋友可以参考下...2020-06-25
  • php实例分享之html转为rtf格式

    核心代码: 复制代码 代码如下:<!--?php$html2RTFCom = new COM("HTML2RTF.Converter");$html2RTFCom--->PreserveImages = true;$html2RTFCom->PageNumbers = 1;$html2RTFCom->PageNumbersAlignH = 1;$html2RTFCom->Pa...2014-06-07
  • php根据日期或时间戳获取星座信息和生肖等信息

    分享一个利用php根据日期或时间戳获取相应的干支纪年,生肖和星座信息的函数方法,具体函数代码以及使用方法如下: /** 判断干支、生肖和星座 */ function birthext($birth){ if(strstr($birth,'-')===false&&strlen($bi...2015-10-21
  • Pycharm 设置默认解释器路径和编码格式的操作

    这篇文章主要介绍了Pycharm 设置默认解释器路径和编码格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
  • java8时间 yyyyMMddHHmmss格式转为日期的代码

    这篇文章主要介绍了java8时间 yyyyMMddHHmmss格式转为日期的代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17
  • nestjs返回给前端数据格式的封装实现

    这篇文章主要介绍了nestjs返回给前端数据格式的封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
  • C#判断日期是否到期的方法

    这篇文章主要介绍了C#判断日期是否到期的方法,是C#程序设计中非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • C#比较日期的方法总结

    在本篇内容中小编给大家整理了关于C#比较日期的方法和相关知识点,有需要的朋友们学习下。...2020-06-25
  • sql通过日期判断年龄函数的示例代码

    这篇文章主要介绍了sql通过日期判断年龄函数,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-07-16
  • 微信小程序wxs日期时间处理的实现示例

    最近在做一个列表的时候,涉及到时间格式化操作。本文主要介绍了微信小程序wxs日期时间处理的实现示例,分享给大家,感兴趣的可以了解一下...2021-07-22
  • jQuery DateTimePicker 日期和时间插件示例

    jQuery UI很强大,其中的日期选择插件Datepicker是一个配置灵活的插件,这篇文章主要介绍了jQuery DateTimePicker 日期和时间插件示例,有兴趣的可以了解一下。...2017-01-26
  • js显示当前日期时间和星期几

    JavaScript获取当前日期时间同时显示星期几,具体代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="/jquery/1.7.0/jquery.min.js...2015-10-23
  • C语言实现时间戳转日期的算法(推荐)

    下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • 微信小程序实现根据日期和时间排序功能

    这篇文章主要为大家详细介绍了微信小程序实现根据日期和时间排序功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-26