php时间戳utc
我有一个PHP MySQL查询,它将一些数据插入MySQL数据库,并包含一个时间戳 当前,php时间戳utc,php,mysql,datetime,timestamp,Php,Mysql,Datetime,Timestamp,我有一个PHP MySQL查询,它将一些数据插入MySQL数据库,并包含一个时间戳 当前,INSERT查询对时间戳列使用NOW(),并以以下格式保存在数据库中:2012-07-24 13:13:02 不幸的是,服务器不在我的时区,它被列为美国/洛杉矶,如图所示print date\u default\u timezone\u get() 我希望做到以下几点: date_default_timezone_set('Europe/London'); $timefordbLondonEU = date
INSERT
查询对时间戳列使用NOW()
,并以以下格式保存在数据库中:2012-07-24 13:13:02
不幸的是,服务器不在我的时区,它被列为美国/洛杉矶,如图所示print date\u default\u timezone\u get()代码>
我希望做到以下几点:
date_default_timezone_set('Europe/London');
$timefordbLondonEU = date('Y-m-d H:i:s', time());
只需将$timefordbLondonEU
保存到数据库中,以代替NOW()
这是保存此类数据的好方法吗
非常感谢,
理查德
[添加文本]
我将MySQL数据库中的类型更改为DateTime
,并执行了以下操作:
date_default_timezone_set('Europe/London');
$timefordbLondonEU = date('Y-m-d H:i:s', time());
这是工作,但我仍然没有得到的整体概念尚未
Assumptions based on your comments:
MySQL=没有UTC数据类型,您只需使用INT类型即可
Unix_TimeStamp()将保存当前时间或计数?采用UTC格式,如1343247227李>
由于UTC是从一个公共0点开始的计数,因此您可以从中获得任何时区。假设您不希望日期早于1970年的参考0点
根据您所说的我的猜测和引导,最好的方法是将时间保存为INT(1343247227)中的UTC,然后从中生成您想要的任何时区。再次假设您不需要存储1970年参考0点之前的日期
同样,为什么不在已知时区存储为datetime YYYY-MM-DD HH:MM:SS,然后转换为UTC或其他时区呢。这一切看起来都很混乱=(正如@Petah在评论中所说,将时间存储在UTC中,并根据需要在应用程序中隐藏它们
Unix时间戳以UTC为单位,因此我通常将时间作为时间戳存储在数据库中。这避免了在选择时先转换为UTC再转换为UTC的麻烦和混乱
也就是说,将时间字段设置为INT
类型,并在插入时使用MySQL中的函数UNIX\u TIMESTAMP()
,或者使用该函数从PHP获取时间戳
当您从数据库中获取时间戳时,它将以UTC为单位,但当您使用date()
在PHP应用程序中显示它时,它将显示在服务器时区中,或使用date\u default\u timezone\u set设置的任何内容中
因此,以下两个查询将起作用:
INSERT INTO `table` (id, time) VALUES(NULL, UNIX_TIMESTAMP());
// or
$time = time();
$query = "INSERT INTO `table` (id, time) VALUES(NULL, $time);
如果要从数据库中选择它作为日期时间,可以执行以下操作:
SELECT *, FROM_UNIXTIME(time) as dt FROM `table` WHERE 1
生成的dt
列的格式为yyyy-MM-dd hh:MM:ss
您可以使用PHP格式化数字时间戳
如果您使用的PHP版本是64位的,那么您不局限于1970-2036范围,PHP将支持64位时间戳,在这种情况下,请确保在MySQL中使用BIGINT
列
希望这能有所帮助。将所有时间存储为UTC,然后在外出时将其转换为所需的时间。或者,如果您不需要存储1970年之前的日期,可以将其存储为Unix时间戳,方法是将字段设置为INT
。好的,这可能让我现在更加困惑。但是我将MySQL中的类型更改为DateTime,并执行了以下操作:date_default_timezone_set('Europe/London');$timefordbLondonEU=date('Y-m-d H:i:s',time());它可以工作,但我仍然没有真正了解它。假设:MySQL=没有UTC的数据类型,所以您使用INT.Unix_TimeStamp()类型是否将保存当前时间或计数?采用UTC格式,如1343247227。由于UTC是从一个公共0点开始的计数,您可以从中获取任何时区?MySQLDATETIME
列只是YYYY-MM-DD HH:MM:SS
格式中的一列,时区不相关。它可以是UTC,也可以是任何其他时区。Unix时间戳(在MySQL中存储为INT或BIGINT)是整数,并且始终以UTC为单位。它们是自1970年UTC 1月1日午夜以来经过的秒数。由于它们始终以UTC为单位,因此可以很容易地与给定时区进行转换。UNIX\u TIMESTAMP()
在MySQL中,将当前时间戳保存为UTC。这是否消除了任何混淆或使其变得更糟?是的,它正在到达那里=D我想唯一的问题是选择您想要的时区并从那里开始。不再是UTC的真正粉丝,似乎如果您选择一个时区并将其用作DateTime格式的参考,您可以随时进行操作如果您需要,可以在不受1970年限制的情况下进行区域转换或日期更改。我猜,如果需要,您可以随时将时区转换为UTC。仅使用datetime有任何缺点吗?再次感谢您的帮助,顺便说一句!!时间戳的好处是,您可以从数据库中获取时间戳,并将其与PHP date funct一起使用此外,时区到服务器时间的转换是自动的。以非UTC格式存储为日期时间需要额外的步骤,将其从存储的时区转换为用户或服务器时区,或者转换为UTC以使用w/PHP日期函数。w/64位PHP,无需担心1970年的限制,您可以为之前的日期设置负时间戳1970年,截止年份是292277026596,所以这不应该是一个问题。由于时间戳是UTC,所以存储在UTC中是非常通用的。