laravel5 timestamp

本文介绍了Laravel5中timestamp的使用,包括timestamp与Timestamp类型的区别,Mysql中的时间数据类型,以及PHP和MySQL的相关函数。讨论了如何在Laravel中处理时间戳,特别是Carbon库的应用,以及Model和Migration中的timestamp处理。还提到了时区问题和在不同场景下选择timestamp或datetime的考量。
摘要由CSDN通过智能技术生成

本文同时发表在本人的博客http://blog.cozyou.com/articles/30

提纲:
-timestamp与Timestamp类型
-mysql中的时间数据类型
-php中的时间函数
-Laravel5 中的timestamp


问题的引出:
laravel5选择carbon做时间库函数,同时在migration中有timstamps这个函数。有如下问题:
1.carbon相关属性?与timestamp联系?
2.在做处理时,timestamp应该如何与UNIX时间戳(int型)进行转换,或者计算时直接用timestamp的相关函数进行计算?
3.时区问题?


timestamp与Timestamp类型

想要解读这三个问题,首先我们要了解时间戳的概念。
在程序员的世界里,时间戳(timestamp)通常指Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
随着类Unix操作系统的普及,Unix时间戳在程序员的世界中逐渐成为主流。
它只是一个单纯的从某个时间点开始的整数,仅此而已。

而在各大流派中,比如某操作系统中,或者某数据库中,都有一些对UNIX时间戳的计算函数,比如:
php中获取时间戳的方法是:time();Date();
Linux中获取时间戳的方法是:date +%s

一定要注意的是:这里的timestamp就是一种约定方式,一个数字,一个定义。而各大流派中的Timestamp类型与这个意义是不一样的,它们封装了一些其他的特性,别搞混了!!!!

Mysql中的时间数据类型

由于与Mysql数据库打交道比较多,所以以这个流派为例说明:

在mysql中,常用的三种表示时间的类型包括:timestamp和datetime,int。内部存储都是整数,只不过datetime和timestamp会显示为可读字符串,默认均位19位的字符串,如’YYYY-MM-DD HH:MM:SS’,存储空间上int和timestamp都是4字节,datetime是8字节,datetime范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,timestamp范围为1970-01-01 08:00:01到2038-01-19 11:14:07。

按道理说,由于可以用int型表示时间,负数即可表示1970年以前的时间,不过在mysql一些版本的一些函数中,处理负的时间戳可能会有坑,比如这里:http://blog.unlink.link/sql/mysql_before_1970_minus_unixtime.html

人们通常说mysql中的timestamp类型是与时区有关的,而datetime与时区无关。这是因为timestamp类型的值以UTC格式保存,It implicitly stores data in GMT time zone.存储时对当前的时区进行转换,检索时再转换回当前的时区;而datetime存进去是啥就是啥。比如如果一个时间t1以timestamp方式存储,则以东8区读出来是9点,以东9区读出来则是10点;而datetime不管这些,你在东8区看着是9点,东9区也一样是9点。

在一些特殊功能的数据结构选型时,要注意到这个时区问题。通常,如果记录事件发生时间等值时最好用timestamp,这样全球每个人都能知道真实的时间。而记录另一些值,比如存储一个人的生日时,最好用datetime类型,想象一下一个人在北京查自己的出生在几点与在华盛顿查询结果不同的感受。

问题来了,我可以将一个表示unix timestamp的整数直接存入mysql timestamp类型中吗,以及在不同时区从timestamp取到的整数值是一定的吗?
我们用integer与Timestamp两种类型存取时间戳的优缺点都有什么,在这里如下的stackoverflow帖子中,做了一些分析:http://stackoverflow.com/questions/7029127/using-mysqls-timestamp-vs-storing-timestamps-directly
mysql中的UNIX_TIMESTAMP等相关函数:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

php中时间的相关函数:

$int=time();//int
$date=('Y-m-d h:i:s'</
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值