• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP中的日期处理_PHP

php 搞代码 3年前 (2022-01-25) 35次浏览 已收录 0个评论

正打算用PHP编写一种帮助处理系统。我发现我必须知道处理完最后一位客户的问题后已经过去了多长时间当我过去用ASP时解决这个问题相当简单ASP有相应的函数DateDiff可以给出两个日期间间隔多少月、多少天和多少秒。当我搜寻完PHP手册后我发现PHP并没有类似的函数。

本文包含以下内容

1、 得到目前的日期和时间我们有多少种方式

2、 改变日期显示的方式日期和时间的显示形式

3、 转换现在的日期为Unix的时间戳值

4、 改变日期

a. 增加时间

b. 减去时间

c. 找出两日期之间的间隔

5、 为PHP添加DateAdd函数

6、 为PHP添加DateDiff函数

**得到目前的日期和时间

在Unix中时间的表示方式为计算从1970年1月1日零时起所过去的秒数这称为UNIX 时间戳(Unix Epoch)

如果我们有这样一段的代码

<?

echo time();

?>

将返回值958905820

而此时的时间为2000年5月21日12时43分。

你也许会说这相当不错。当这对我毫无帮助或者只有一点帮助。在PHP中对日期处理的函数都必须用到由time()返回的时间戳值。同时由于PHP在Unix和Windows系统中均使用同样的时间戳值这就允许你不需要修改代码即可在不同的系统间移植。另外的一个好处是time()函数返回的是一个整数你可以将其作为整数字段或文本字段存入数据库而不必使用特别的日期/时间字段。

你已经基本了解了Unix的时间戳值现在让我们来展示它的实际用途。

改变日期显示的方式日期和时间的显示形式

PHP提供两个办法来将Unix的时间戳值转换成为有用的数据。第一个是date()函数。这个函数有两个参数第一个字符串用于设定你所希望返回的格式第二个为Unix的时间戳值。

格式化字符串通过一些简单的特殊格式化字符来显示你所希望看到的格式的日期和时间。假设你希望日期以这样的格式显示“18h01 Sunday 21 May”。

我们需要对字符串中的每一部分使用一个特殊格式化字符你可以从PHP手册中日期和时间函数库中找到。这样的特殊格式化字符数量不少他们所表示的类似于星期几、月的英文名、用2位或4位数表示的年份是否是上午AM或下午PM以及其他。对于这个例子我们需要的特殊字符为

‘H’ 24 小时制的小时

‘i’ 分钟

‘l’ 星期几的英文全名

‘d’ 本月的第几日

‘F’ 月份的英文全名

因此我们的格式化字符串为”Hhi l d F” PHP代码为

<?

echo date (“Hhi l d F” ,time());

?>

当我们执行这段代码我们发现我们所得到的结果为

180609 Sunday 21 May

这样的结果看起来有些奇怪。让我们再查一下PHP手册原来’h’所代表的是12 小时制的小时数。这再次证明了一句真理“计算机只做你所告诉它该做的而不是你想要它做的”。我们有两个选择。第一个是在h前使用转义字符“\”

echo date (“H\hi l d F”, time());

我们得到这样的结果

18h12 Sunday 21 May

这正是我们所要的。但如果我们在一个十分复杂的句子中需要包含日期和时间我们是否需要对每个字符使用转义字符

答案当然是不。我们使用另一个函数strftime()

strftime()有两个好处。第一个好处我们并不在本文讨论范围内如果你使用setlocale()函数你可以通过strftime得到相应语言的月份的名称。另外的一个好处是你可以将特别的日期和时间的格式化字符包含在你的字符串中。这同时也意味着无论你是否要学习date()函数的所有特殊格式化字符你都必须学习一整套完全不同的格式化字符。

strftime()工作的方式和date()没有什么不同除了特殊格式化字符的前面必须添加一个百分号%。如果用strftime()函数前面例子的代码如下

<?

echo strftime (“%Hh%M %A %d %b” ,time());

?>

结果为

18h24 Sunday 21 May

这也许看起来将简化繁但考虑一下如果你所需要的显示的为“Today is Sunday 21 May 2000. The time is somewhere close to 18h24.” 我想使用date()函数无疑令人感到厌烦。

在开始的时候我提及我们有两种方式可以从Unix时间戳值中得到有用的数据。我们刚刚了解了date()和strftime()。另一个getdate()。这个函数只需要Unix 的时间戳值作为参数而函数的返回值为日期和时间的数组。

下面是一个例子

<?

$date_time_array = getdate (time());

echo $date_time_array[ “weekday”];

?>

返回的结果为

Sunday

除了“weekday”该数组的其他部分为

“seconds” –秒

“minutes” –分

“hours” –小时

“mday” – 本月的第几天

wday” -本周的第几天(数字)

mon” -月(数字)

year” –年

yday” – r本年的第几天(数字)

month” -月份全名

我们现在可以得到容易辨认的日期和时间。那么其他呢?

**转换现在的日期为Unix的时间戳值

通常你必须处理一些日期或时间格式的数据。打开M$的一个Access数据库,所有的日期都以YYYY/MM/DD的格式存储,加入目前的日前即为2000/05/27。Mktime()函数可以将一个时间转换成Unix的时间戳值。

函数的格式为:int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] );

从左往右你必须提供小时、分、秒、月、天和年。最后一个参数用于指定你是否处于夏令时,此参数是可选的,所以我们将忽略它。

代码如下:

<?

echo mktime (0, 0,0 ,5, 27,2000 );

?>

由于不知道小时、分和秒同时这些参数必须填写,我将其设置为0。设置为0意味着时间为午夜。

<?

$access_date = “2000/05/27“;

//explode()函数用一个字符串作为分界来分解另一个字符串。这个例子$access_date通过字符串”/”来分解

$date_elements = explode(“/” ,$access_date);

// 此时

// $date_elements[0] = 2000

// $date_elements[1] = 5

// $date_elements[2] = 27

echo mktime (0, 0,0 ,$date_elements [1], $date_elements[ 2],$date_elements [0]);

?>

我们看一个比从Access数据库单纯获得日期更复杂的情况,我们得到一个以下格式的日期和时间:2000/05/27 02:40:21 PM

<?

// 来自Access的字符串

$date_time_string = “2000/05/27 02:40:21 PM”;

// 将字符串分解成3部分-日期、时间和上午/下午

$dt_elements = explode(” ” ,$date_time_string);

// 分解日期

$date_elements = explode(“/” ,$dt_elements[ 0]);

// 分解时间

$time_elements = explode(“:” ,$dt_elements[ 1]);

// 如果是下午,我们将时间增加12小时以便得到24小时制的时间

if ($dt_elements [2]== “PM”) { $time_elements[ 0]+=12;}

// 输出结果

echo mktime ($time_elements [0], $time_elements[ 1], $time_elements[ 2], $date_elements[1], $date_elements[2], $date_elements[0]);

?>

**修改日期

有时我们需要知道6小时以后是什么时间35天前的日期或者从你最后一次玩Quake3后已过去多少秒。我们已经知道如何用mktime()函数从单独的日期和时间中获得Unix的时间戳值。如果我们需要的并非目前日期和时间的Unix时间戳值我们该咋办下面是一些练习可以帮助说明我们后面所要做的。

正如前面所见mktime()使用以下参数小时、分、秒、月、天和年。想想第二节getdate()来2源gaodaima#com搞(代@码&网函数可以为我们获得这些参数。

<?

// 将目前的时间戳值放入一数组内

$timestamp = time();

echo $timestamp;

echo “


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中的日期处理_PHP

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址