UNIX时间戳及日期的转换与计算
UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式。以32位整数表示格林威治标准时间,例如,使用证书11230499325表示当前时间的时间戳。UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所经过的秒数。1970年1月1日零点作为所有日期计算的基础,这个日期通常成为UNIX纪元。
将日期和时间转变成UNIX时间戳
在PHP中,如果需要将日期和时间转变成UNIX时间戳,可以调用mktime()函数。该函数的原型如下所示:
int mktime([int hour [,int minute[,int second[,int month[,int day[int year]]]]]])
该函数中所有参数都是可选的,如果参数为空,默认将当前时间转变成UNIX时间戳。这样,和直接调用time()函数获取当前的UNIX时间戳功能相同。参数也可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。如果只想转变日期,对具体的时间不在乎,可以将前三个转变时间的参数都设置为0.mktime()函数对于日期运算和验证非常有用,它可以自动校政越界的输入。如下所示:
|
1
2
3
4
5
6
|
<?phpecho date("Y-m-d",mktime(0,0,0,12,36,2008))."\n"; //日期超过31天,计算后输出 2009-01-05echo date("Y-m-d",mktime(0,0,0,14,1,2010))."\n"; //月份超过12月,计算后输出2011-02-01echo date("Y-m-d",mktime(0,0,0,1,1,2012))."\n"; //没有问题的转变,输出结果2012-01-01echo date("Y-m-d",mktime(0,0,0,1,1,99))."\n"; //会将99年转变为1999年, 1990-01-01?> |
如果有需要将任何英文文本的日期时间描述直接解析为UNIX时间戳,可以使用strtotime()函数,该函数的圆形如下所示:
int strtotime(string time[,int now])
函数strtotime()可以用英语的自然语言创建讴歌时刻的时间戳,接受一个包含美国英语日期格式的字符串并尝试将其解析为UNIX时间戳(自January 1 1970 00:00:00 GMT起的描述),其值相对于now参数给出的时间,如果没有提供次参数则用系统当前时间。该函数执行成功则返回时间戳,否则返回FALSE。和mktime()的对比如下所示:
|
1
2
3
4
5
6
|
<?phpecho date("Y-m-d", strtotime("now")); //输出现在的时间戳echo date("Y-m-d", strtotime("8 may 2012")); //输出2012-05-08echo date("Y-m-d", strtotime("+1 day")); //输出现在的日期加1天echo date("Y-m-d", strtotime("last monday")); //输出2012-04-02?> |
下例通过使用strtotime()函数编写一个纪念日的倒计时程序,来介绍一下该函数在项目开发中的实际应用,示例代码如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php$now =strtotime("now"); //当前时间$endtime= strtotime("2014-08-18 08:08:08"); //设定毕业时间,转成时间戳$second = $endtime-$now; //获取毕业时间到现在时间的时间戳(秒数)$year = floor($second/3600/24/365); //从这个时间戳中换算出年头数$temp =$second-$year*365*24*3600; //从这个时间戳中去掉整年的秒数,就剩下月份的秒数$month=floor($temp/3600/24/30); //从这个时间戳中共换算出月数$temp=$temp-$month*30*3600*24; //从时间戳中去掉整月的秒数,就剩下天的描述$day = floor($temp/24/3600); //从这个时间戳中换算出剩余的天数$temp=$temp-$day*3600*24; //从这个时间戳中去掉整天的秒数,就剩下小时的秒数$hour = floor($temp/3600); //从这个时间戳中换算出剩余的小时数$temp=$temp- $hour*3600; //从时间戳中去掉小时的秒数,就剩下分的秒数$minute=floor($temp/60); //从这个时间戳中换算出剩余的分数$second1=$temp-$minute*60; //最后只有剩余的秒数了echo "距离培训毕业还有($year)年($month)月($day)天($hour)小时($minute)分($second1)秒。";?> |
注意:如果给定的年份是两位数字的格式,则其值0-69表示2000-2069,70-100表示1970-2000。
日期的计算
在PHP中,计算两个日期之间相隔的长度,最简单的方法就是通过计算两个UNIX时间戳之差来获得。例如,在PHP脚本中接收来自HTML表单用户提交的出生日期,计算这个用户的年龄。如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php//从表单中接收用户提交的出生日期中的年份、月份、天$year = 1981;$month = 11;$day = 05;$birthday = mktime(0,0,0,$month,$day,$year); //将出生日期转变为UNIX时间戳$nowdate = time(); //调用time()函数获取当前时间的UNIX时间戳$ageunix = $nowdate -$birthday; //两个时间戳相减获取用户年龄的UNIX时间戳$age = floor($ageunix/3600/24/365); //将UNIX时间戳除以一年的秒数获取用户的年龄echo "年龄:$age";?> |
在以上的脚本中,调用mktime()函数将从用户出生日期转变为UNIX时间戳,再调用time()函数获取当前时间的UNIX时间戳。因为这个日期的格式都是使用整数表示的,所以可以将他们相减。又将计算后获取的UNIX时间戳除以一年的秒数,将UNIX时间戳转变为以年度量的单位。
UNIX时间戳及日期的转换与计算的更多相关文章
- MYSQL中UNIX时间戳与日期的转换
select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s'); select UNIX_TIMESTAMP('2016-06-04 01:03:05 ...
- Unix时间戳转日期时间格式,C#、Java、Python各语言实现!
之前有个Q上好友没事问我,怎么自己写Unix时间戳转日期时间?于是我就顺手写了个C#版本给他!最近想起来,就萌发多写几个语言的版本分享,权当练习思路外加熟悉另外两种语言. 先说转换步骤 先处理年份,从 ...
- php 时间戳与日期的转换(转载)
UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式. a:Unix时间戳存储.处理方便,但是不直观 b:格式化日期直观,但是处理起来不如Unix时间戳那么自如 [关于两者的互相转换] 日 期 ...
- 解析php时间戳与日期的转换
php中时间戳与日期的转换. 实现功能:获取某个日期的时间戳,或获取某个时间的PHP时间戳. strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date( ...
- mysql UNIX时间戳与日期的相互转换
UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() ...
- UNIX时间戳与日期的相互转换
mysql中UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数:FROM_UNIXTIME() select FROM_UNIXTIME(1410318106); 日期转换为UNIX时间戳 ...
- mysql UNIX时间戳与日期的相互转换 查询表信息
UNIX时间戳转换为日期用函数FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数UNIX_TIMESTAMP() Sel ...
- MySQL 时间戳与日期互相转换
MySQL 时间戳与日期互相转换 1.时间戳转换成日期 函数:FROM_UNIXTIME() ,'%Y年%m月%d日') 结果为:2015年04月15日 2.把日期转换为时间戳,和 FROM_UNIX ...
- PHP时间戳和日期互转换
在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明. 1.php中时间转换函数 strtotime ...
随机推荐
- 多备份CEO胡茂华:创业路上的五道坎
本文由多备份CEO胡茂华记述,授权南七道发表,未做删改.胡茂华:腾讯第116号员工,历任腾讯总监.盛大CTO (旅游).1号店技术副总裁.现担任云服务提供商多备份联合创始人&CEO. 2014 ...
- POJ1062 昂贵的聘礼(最短路)
题目链接. 分析: 一开始以为简单的DFS,直接做,MLE了. 本体应该用最短路径(Dijkstra算法)做. 此题的关键在于等级限制的处理,采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等 ...
- Notepad++去除代码行号的几种方法
Notepad++去除代码行号的几种方法 (转自:http://hi.baidu.com/beer_zh/item/e70119309ee587f2a8842892)问:在网页中复制代码时,常常遇到高 ...
- Object -C NSSet -- 笔记
// // main.m // NSSET // // Created by facial on 25/8/15. // Copyright (c) 2015 facial_huo. All ...
- linux if 判断字符串是否相等
在命令行中修改时间: 如果linux系统时间等于2017-09-09,则ok:否则将当前系统时间修改为2017-09-09 var=`date '+%Y-%m-%d'`;if [ "$var ...
- 左移运算符<<
在许多计算机编程语言(例如:C语言.C++语言.Java语言.JavaScript语言,Pascal语言等)中,“<<”代表左移运算符(就相当于'shl').该运算符为双目运算符,结合方向 ...
- 真正菜鸟用教程之WQSG Scrip Export WQSG (脚本导出导入工具,PSP、NDS汉化必备 )
先扫盲WQSG是干什么用的 一些掌机类游戏汉化比方PSP NDS 汉化必备之物 它能够依据字典转换文本 假设你不知道这是啥玩意,快去充电染成茜色的坂道 文本提取(导出)方法 (下文称导出文章) 在导出 ...
- Android SimpleAdapter ListView (锁定手机,解锁手机的列表)
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局. 构造方法: SimpleAdapter(Context context, List<? extends Map< ...
- Android ImageView
如上图,drawable中不只是可以放bitmap 还可以定制不同形状 <?xml version="1.0" encoding="utf-8"? ...
- Java中equals和“==””的区别,String特殊
public class TestString { /* * java中的数据类型,可分为两类: * 1.基本数据类型,也称为原始数据类型.byte,short,char,int,long,float ...