当前位置:  编程技术>php
本页文章导读:
    ▪php中strtotime时间函数使用详解      本文主要内容: 1)、strtotime函数的一些用法 2)、strtotime函数的实现基本原理 3)、strtotime(”-1 month”)求值失败的原因 下面介绍下strtotime函数的用法。 1、 strtotime(”JAN”)和strtotime(”January.........
    ▪PHP计算上一个月的今天的代码      一开始使用 strtotime(”-1 month”) 函数求值,月长度不一样的月份的计算结果有误。 例,2011-03-31,得到:2011-03-03。 如何解决这个问题呢? PHP中有一个mktime函数,用这个函数写出的代码如下.........
    ▪PHP基础之流程控制语句      PHP 有三大流程控制:顺序控制,分支控制,循环控制。 1、顺序控制:就是程序按顺序从上往下一步一步的执行。 2、分支控制:程序有选择的执行。又分单分支,多分支,多重分支。 a、单.........

[1]php中strtotime时间函数使用详解
    来源: 互联网  发布时间: 2013-12-24

本文主要内容:
1)、strtotime函数的一些用法
2)、strtotime函数的实现基本原理
3)、strtotime(”-1 month”)求值失败的原因

下面介绍下strtotime函数的用法。

1、 strtotime(”JAN”)和strtotime(”January”)
这两个用法的效果是一样的,都是返回指定月份的今天,如果指定月份没有今天,则顺延到下一个月。 如在2011-03-31计算二月,代码:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("feb", strtotime("2011-03-31")));

程序会输出: 2011-03-03 00:00:00。 从表象来看,这个结果也许不一定是我们想要的,但是这也算是一种解决方案,这种方案是由什么决定的呢? strtotime函数在执行月份的计算
时只计算了月份,相当于直接将月份设置为指定的月份的值,而如jan,january都会有一个对应内部数值。

2、 first关键字
first是一个辅助型的关键字,它可以与星期,天等可以指定确认值的关键字组合使用,如求2011年的第一个星期天:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("second sunday", strtotime("2011-01-01"))), "<br />";

在PHP的源码中,对于first与星期和天的组合使用是分开的,即first day对应一个处理操作, 在最终的C实现中,天的值指定为1,即time结构中的d字段指定为1,如下代码:
 

代码示例:
switch (time->relative.first_last_day_of) {
case 1: /* first */
time->d = 1;
break;
case 2: /* last */
time->d = 0;
time->m++;
break;
}

3、previous和next关键字
与first类似,previous关键字可以与星期,天组合使用,表示指定时间的前一个星期几或前一天。如下所示代码:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("previous sunday", strtotime("2011-02-01"))), "<br />";

程序会输出:2011-01-30 00:00:00
程序求2011-02-01的前一个星期天。
next关键字与previous相反,它表示下一个星期几或后一天。

4、 last关键字
last关键字既可以作为上一个,也可以作为最后一个。如求上一个星期天的日期:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("last sunday", strtotime("2011-02-05"))), "<br />";

程序会输出: 2011-01-30 00:00:00
当程序作为最后时,其应用场景是指定日期所在月的最后一天,相当于date(”t”)的结果。如求2000年2月的最后一天:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("last day", strtotime("2000-02-01"))), "<br />";
 

first、previous、last和this关键字在re文件中属于同一组。

5、 back和front关键字
这两个关键字是对一天中的小时的向前和向后操作,其调用格式如下:
 

代码示例:
echo date("Y-m-d H:i:s", strtotime("back of 24", strtotime("2011-02-01"))), "<br />";
echo date("Y-m-d H:i:s", strtotime("front of 24", strtotime("2011-02-01"))), "<br />";

back表示将时间设置指定小时值的后一个小时的15分的位置。如果是24点,则算到第二天的0点15分。
front表示将时间设置指定小时值的前一个小时的45分的位置。如果是0点,则算前一天的23点45分。
上面的代码输出:2011-02-02 00:15:00 2011-02-01 23:45:00。 其中back of和front of后接的数组必须大于等于0并且小于等于24。
strtotime函数的实现基本原理
官方文档对于strtotime函数的说明是这样的:本函数预期接受一个包含美国英语日期格 式的字符串并尝试将其解析为 Unix 时间戳 (自 January 1 1970 00:00:00 GMT 起的秒数
),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间。
这是一个标准PHP内置函数,从PHP4起就已经存在。strtotime函数是以一个扩展的方式加载进来的,在ext/date目录下有其全部实现。 作为一个标准的内置函数,其定义格式也是标准
的,如下:
 

代码示例:
PHP_FUNCTION(strtotime)
// 处理输入,对于是否有第二个参数有没的处理
// 调用相关函数,实现字符串的解析和结果计算
// 返回结果
}

在输入处理中,先识别两个参数都存在的情况并进行处理,如果不是此种状态,则处理第二个参数不存在的情况, 如果都没有,则报错,返回FALSE。


    
[2]PHP计算上一个月的今天的代码
    来源: 互联网  发布时间: 2013-12-24

一开始使用 strtotime(”-1 month”) 函数求值,月长度不一样的月份的计算结果有误。
例,2011-03-31,得到:2011-03-03。

如何解决这个问题呢?
PHP中有一个mktime函数,用这个函数写出的代码如下:
 

代码示例:
echo date("Y-m-d H:i:s", mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time) - 1, date("j", $time), date("Y", $time)));

当执行时,发现结果和strtotime的结果是一样的。
还是基于这个函数,既然无法直接操作月,那么我们从天入手,得到上一个月,然后再使用date拼接数据。
例如:
 

代码示例:
<?php
$time = strtotime("2011-03-31");
/**
* 计算上一个月的今天
* @param type $time
* @return type
*/
function last_month_today($time) {
$last_month_time = mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time), - 1, date("Y", $time));
return date(date("Y-m", $last_month_time) . "-d H:i:s", $time);
}
echo last_month_today($time);
?>

问题再次出现,不存在2011-02-31这样的日期,怎么办?
需求是对于这样的日期显示当月最后一天。
例如:
 

代码示例:
<?php
$time = strtotime("2011-03-31");
/**
* 计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天
* @param type $time
* @return type
*/
function last_month_today($time){
$last_month_time = mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time), 0, date("Y", $time));
$last_month_t = date("t", $last_month_time);
if ($last_month_t < date("j", $time)) {
return date("Y-m-t H:i:s", $last_month_time);
}
return date(date("Y-m", $last_month_time) . "-d", $time);
}
echo last_month_today($time);
?>
 

注意: date(”Y-m”, $last_month_time) . “-d”这段代码。在写代码的过程中如果写成了 “Y-” . date(”m”, $last_month_time) . “-d” 则在跨年的时间
上有问题。
除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。

有关用php计算上个月的今天的代码,就介绍到这里了,有点小波折,希望对大家有所帮助。


    
[3]PHP基础之流程控制语句
    来源: 互联网  发布时间: 2013-12-24

PHP 有三大流程控制:顺序控制,分支控制,循环控制。

1、顺序控制:就是程序按顺序从上往下一步一步的执行。

2、分支控制:程序有选择的执行。又分单分支,多分支,多重分支。

a、单分支:基本语法结构:
 

if(条件表达式){

  语句;

  //.....;

}

 提示:条件表达式不管有多复杂,最终就是true或者false;

例子,
 

代码示例:
a=11;
if(a>10){
  echo "a>10";
}

b、多分支:基本语法:
 

if(条件表达式){

  语句;

  //.....;

}else{

  语句;

  //.....;

}

c、多重分支:基本语法:
 

if(条件表达式){
  语句;n个语句;
}else if(条件表达式){
语句;n个语句;
}elseif(条件表达式){
语句;n个语句;
}eles{
语句;n个语句;
}

 提示:1、else if 可以有一个 也可以有多个。2、最后那个else可以没有

d、switch分支语句
 

switch(表达式){
  case 常量1:

    语句;n个语句;

    break;

  case 常量2:

    语句;n个语句;

    break;

  case 常量3:

    语句;n个语句;

    break;

  default:

    语句;n个语句;

    break;
}

注意:
1、case 语句有一到多
2、defaul 语句可以没有(根据自己代码的业务逻辑)
3、通常,在case 语句后,要带break ,表示退出switch语句
4、常量的类型 (int, float, 字符串, 布尔型)

重点:程序首先按照case顺序进行配置,如果一个都没有匹配到,则执行 default语句的内容,直到遇到break,则退出switch;

 if  和 switch 分支比较:
if 对某个范围的判断,而switch是对一个点的判断, 所以我们可以这样去选择他们:
应用场景: 当分支就是几个点时(比如判断坦克的方向),使用swtich。
当分支是几个区域(范围)的判断,则考虑使用if。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3