PHP - Unix 时间戳与现在的比较
我正在从数据库检索 unix 时间戳,我想检查该日期时间是否已经过去。
我尝试使用 if 语句与 time() 进行比较,但它总是说时间已经过去了。
我做错了什么?
编辑:只是更多信息..为了确定上午/下午,我在通过 mktime() 运行之前将 12 添加到小时(如果是 PM)。 (这是正确的吗?)
它作为 int 而不是任何日期时间类型存储在数据库中。
I'm retrieving a unix timestamp from a DB and I want to check if this datetime has passed already.
I tried using an if statement to compare to time()
but it always says the time has passed already.
What am I doing wrong?
EDIT: Just some more info..to determine am/pm I'm adding 12 to the hour if its PM before running it through mktime(). (Is this right?)
It's stored in the DB as int not as any datetime types.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的 PHP 时间可能会受到 PHP 时区的影响。使用 date_default_timezone_get() 找出您所在的时区。
Your PHP time could be affected by PHP's timezone. Use date_default_timezone_get() to find out what time zone you're in.
确保数据库和 PHP 中的时区相同,使用 NOW() 函数用当前时间戳填充数据库列(该列应为 datetime 类型),然后你可以使用
UNIX_TIMESTAMP()
MySQL 函数获取时间戳,该函数与 PHP 的time()
相比效果很好。或者,您可以使用类似的内容填充数据库列,
即使存在时区差异,它也应该可以工作。
Make sure the timezones in the DB and PHP are the same, use
NOW()
function to fill the DB column with current timestamp (the column should be of datetime type), then you can get the timestamp usingUNIX_TIMESTAMP()
MySQL function which compares against PHP'stime()
just nice.Alternatively, you can fill the DB column with something like
That should work even with timezone discrepancies.
如果您使用 mktime 创建 UNIX 时间戳,PHP 将使用时区设置来解释给定参数的含义。您可能应该使用
gmmktime
。这取决于数据库中的时间戳是如何创建的;如果没有看到更多代码和更详细的解释,我不能肯定地说。我通常更喜欢将所有日期简单地存储为 UTC (GMT) 时区中的 DATETIME 类型。它往往不会那么混乱。
所以您不必总是添加 12。(即,中午 12 点是例外)。
If you are using
mktime
to create a UNIX timestamp, PHP is using the timezone settings to interpret what you mean by the given parameters. It's possible that you should be usinggmmktime
. It depends on how the timestamps in the database are being created; I cannot say for sure without seeing more code and having a more detailed explanation.I generally prefer to simply store all dates as DATETIME types in the UTC (GMT) timezone. It tends to be less confusing.
So you don't always add 12. (i.e., 12 Noon is the exception).