UNIX时间戳及日期的转换与计算

UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式。以32位整数表示格林威治标准时间,例如,使用证书11230499325表示当前时间的时间戳。UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所经过的秒数。1970年1月1日零点作为所有日期计算的基础,这个日期通常成为UNIX纪元。

因为UNIX时间戳是一个32位的数字格式,所以特别适用于计算机处理,例如计算两个时间点之间相差的天数。另外,由于文化和地区的差异,存在不同的时间格式,以及时区的问题。所以UNIX时间戳也是根据一个时区进行标准化而设计的一种通用格式,并且这种格式可以很容易地转换为任何格式。也因为UNIX时间戳是一个32位的证书表示的,所以在处理1902年以前或2038年以后的事件将会遇到一些问题。另外,在Windows下,由于时间戳不能为负数,所以使用PHP中提供的时间戳函数处理1970年之前的日期,就会发生错误。要使PHP代码具有可移植性,必须记住这一点。

将日期和时间转变成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
<?php
echo date("Y-m-d",mktime(0,0,0,12,36,2008))."\n";    //日期超过31天,计算后输出 2009-01-05
echo date("Y-m-d",mktime(0,0,0,14,1,2010))."\n";     //月份超过12月,计算后输出2011-02-01
echo date("Y-m-d",mktime(0,0,0,1,1,2012))."\n";      //没有问题的转变,输出结果2012-01-01
echo 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
<?php
echo date("Y-m-d", strtotime("now"));                  //输出现在的时间戳
echo date("Y-m-d", strtotime("8 may 2012"));           //输出2012-05-08
echo 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时间戳转变为以年度量的单位。

转载于:https://www.cnblogs.com/ncong/p/3909796.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring mvc响应数据方式

目录1. 页面跳转2. 回写数据ResponseBody注解1. 页面跳转 转发&#xff0c;如果有视图解析器&#xff0c;要写全路径/pages/success.jsp RequestMapping("/save4") public String save4(HttpServletRequest req) {req.setAttribute("key", "value 4…

boot栅格布局

栅格布局 使用boot必须熟练使用的三个知识点,媒体查询, 栅格布局,scss 为什么要使用栅格布局? 项目中做布局的方式 table布局csshtml布局栅格布局简单,容易控制语义正确,渲染效率高简单(类似于table)非常容易控制,渲染效率高,语义正确,支持响应式效率低,语义错误控制比较麻…

Math.random()

Math.random();Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值,[0,1)返回指定范围的随机数[m-n)的公式 &#xff1a;Math.random()*(n-m)m&#xff1b;返回指定范围的随机数[m-n](区间不同)的公式 &#xff1a;Math.random()*(n-m1)m&#xff1b;eg…

spring mvc 接收页面数据

目录1. 基本类型的数据封装2. pojo&#xff08;bean)类型的封装3. 数组类型4. list集合类型1. 基本类型的数据封装 //http://localhost:8080/spring_mvc_01/user/save8?namebitqian&age19 RequestMapping(value "/save8") ResponseBody public void save8(Str…

css样式引入的优先级

css样式引入的优先级 1 位于<head/>标签里的<style/>中所定义的CSS拥有最高级的优先权。2、第二级的优先属性由位于 <style/>标签中的 import 引入样式表所定义。3、第三级的优先属性由<link/>标签所引入的样式表定义。4、第四级的优先属性由<link…

前端学习(1182):差值表达式

插值表达式语法&#xff1a;{{}} 使用时请注意以下几点&#xff1a; 插值表达式是vue框架提供的【指令】 插值表达式中 不可以写代码片段 会报错 属性节点中不能使用插值表达式&#xff0c;如果要为元素节点动态绑定数据&#xff0c;我们要用v-bind动态绑定属性&#…

单片机的 FIFO循环队列实现

转自&#xff1a;单片机的FIFO(先入先出)循环队列实现 // // 文件&#xff1a;config.h // #ifndef __CONFIG_H #define __CONFIG_H //这一段无需改动 //This segment should not be modified #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif type…

前端学习(1183):指令v-cloak

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…

mvc自定义日期转换器

1. 配置编码过滤器 1&#xff0c; web.xml中设置配置spring mvc提供的编码过滤器&#xff0c;解决get/post提交过来的数据乱码问题 <!--配置编码过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.spring…

link引入和@import的区别

本质上, 这两种方式都是加载CSS文件, 但还是存在着细微的差别 import 机制不同于link&#xff0c;link是加载页面前css加载完毕&#xff0c;import 是先读取文件再加载import是css2.0里的 ie5以上不支持用js控制dom时改变样式&#xff0c;只能用link&#xff0c;import不是dom…

重新理解javascript回调函数

把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况&#xff0c;某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我需要你们提供满足某种需求的数据,你给我提供一个接…

前端学习(1184):数据绑定指令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…

struts2文件上传,下载

目录1. 页面表单2. 上传下载实现1. 页面表单 <HTML><HEAD><TITLE>上传下载图片</TITLE><meta http-equiv"Content-Type" content"text/html; charsetGBK"></head><body><form enctype"multipart/form-…

各个浏览器以及内核

//IE :trident 简写:-ms- //Firefox :Gecko 简写:-moz-//Google chrome:webkit/blink 简写:-webkit-//Sefari:webkit 简写:-webkit-//opera:presto 简写:-o-

Windows安装Python包下载工具pip遇到的问题

到Python的官网下载get-pip.py文件&#xff0c;然后按照说明进行安装。 在安装过程中&#xff0c;我遇到以下问题&#xff1a; cmd的codepage引起的编码错误&#xff0c;提示65001编码错误&#xff0c;通过chcp 936切换到默认的代码页可解决此问题。其次是权限的问题&#xff0…

前端学习(1185):数据响应式

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…

Tomcat7.0+的JNDI问题

上次搭建springspringmvcmybatis框架时用的第三方连接池jar包&#xff0c;但是部署到tomcat中后访问没有问题&#xff0c;但是启动时报了个JNDI的错&#xff0c;我没用JNDI你给我报什么&#xff0c;fuck&#xff01;把错误贴到百度上搜索没搜到&#xff0c;更fuck&#xff0c;没…

spring mvc 实现单文件 || 多文件上传

文件上传1. pom依赖&#xff08;jar包&#xff09;2. 文件上传解析器配置3. 上传实现4. 下载||文件展示实现&#xff08;io流的实现&#xff09;项目下载地址https://github.com/sevenyoungairye/File-Upload1. pom依赖&#xff08;jar包&#xff09; <!-- common upload fi…

前端学习(1186):双向数据绑定

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…