时间戳:UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式。UNIX时间戳是从1970年1月1日0点(UTC/GMT的午夜)开始起到当前时间所经过的秒数。
(1)date() 函数
该函数将时间戳格式化为更易读的日期和时间。
语法:date( string $format [, int $timestamp ] );$timestamp是可选的,默认是time()。
echo "今天是 " . date("Y/m/d") . "<br>"; // 输出:今天是 2018/12/05 echo "今天是 " . date("Y.m.d") . "<br>"; // 输出:今天是 2018.12.05 echo "今天是 " . date("Y-m-d") . "<br>"; // 输出:今天是 2018-12-05 echo "今天是 " . date("l") . "<br>"; // 输出:今天是 Wednesday echo date("Y-m-d",1544009310); //输出: 2018-12-05
(2)time()
该函数返回当前的时间戳。
echo "当前时间为:".date("Y-m-d H:i:s A")."<br>";// 输出:当前时间为:2018-12-05 11:37:20 AM echo "当前时间的时间戳为:".time()."<br>"; // 输出:当前时间的时间戳为:1544010043 echo "一天之后的时间为:".date("Y-m-d H:i:s A", time()+24*60*60)."<br>";
// 输出:一天之后的时间为:2018-12-06 11:37:20 AM echo "一周之后的时间为:".date("Y-m-d H:i:s A", time()+7*24*60*60)."<br>";
// 输出:一周之后的时间为:2018-12-12 11:37:20 AM echo "30天之后的时间为:".date("Y-m-d H:i:s A", time()+30*24*60*60)."<br>";
// 输出:30天之后的时间为:2019-01-04 11:37:20 AM
(3)maketime()
创建时间的Unix时间戳。
mktime(hour,minute,second,month,day,year)
$d=mktime(9, 12, 31, 6, 10, 2015); echo "创建日期是 " . date("Y-m-d h:i:sa", $d); //输出:创建日期是 2015-06-10 09:12:31am
(4)strtotime()
用字符串来创建日期。
$d=strtotime("10:38pm December 15 2018"); echo "创建日期的时间戳是 " .$d; //输出:创建日期的时间戳是 1544913480 echo "创建日期是 " . date("Y-m-d h:i:sa", $d) . "<br>"; //输出:创建日期是 2018-12-15 10:38:00pm $d=strtotime("tomorrow"); echo date("Y-m-d h:i:s", $d) . "<br>"; //输出:2018-12-06 12:00:00 $d=strtotime("next Saturday"); echo date("Y-m-d h:i:sa", $d) . "<br>";//输出:2018-12-08 12:00:00am $d=strtotime("+3 Months"); echo date("Y-m-d h:i:sa", $d) . "<br>";//输出:2019-03-05 11:52:55am
在实际的项目开发中也会经常用到时间日期函数。
比如我在做项目的时候,会用到选择时间的日历插件 laydate.js 。用户可以直接选择时间,生成的时间返回给后台,格式是提前就可以规定好的。
<div class="form-group"> <label for="inputEmail3" class="control-label">开始时间</label> <div class="control-counten"> <input type="text" class="form-control width200" name="starttime" id="starttime" /> <script type="text/javascript" src="../static/laydate/laydate.js"></script> <script type="text/javascript"> laydate.skin("molv");//设置皮肤 var start = { elem: '#starttime', format: 'YYYY-MM-DD ', min: '2018-06-16 23:59:59', //设定最小日期为当前日期 max: '2099-06-16 23:59:59', //最大日期 istime: true, istoday: false, choose: function(datas){ end.min = datas; //开始日选好后,重置结束日的最小日期 end.start = datas; //将结束日的初始值设定为开始日 } }; laydate(start); var end = { elem: '#stoptime', format: 'YYYY-MM-DD ', min: '2018-06-16 23:59:59', //设定最小日期为当前日期 max: '2099-06-16 23:59:59', //最大日期 istime: true, istoday: false, choose: function(datas){ start.max = datas; //结束日选好后,重置开始日的最大日期 } }; laydate(end); </script> </div> </div>
可以看出这里用的格式是 format: 'YYYY-MM-DD ',最后生成的日期也是形如2018-12-05 这样的形式。我们将生成的这个时间通过 strtotime() 函数转换为时间戳存到数据库当中。此时,数据库的时间是精确到秒级别,即一共十位数字。但是,在使用时间js插件时,我们会通过 下面的形式将格式化日期转化为时间戳,但是这里是精确到毫秒级,即13位。
var timestamp = (new Date(starttime.replace(/-/g, '/'))).valueOf(); //13位数字,精确到毫秒
此时,要么将数据库中的时间乘以1000,要么将js转化的时间除以1000,使得两者一致。