2013-11-22 121 views
0

目前我正在创建一个也创建日志的网站。问题是,时间戳。除了“小时”以外的所有内容都正确读取PHP时间戳小时问题

代码:

$date = date('Y-m-d, g:i:s a'); 
$sql = "INSERT INTO logs (ip, date, page) VALUES ('$ip', '$date', '$page')"; 

目前,它是下午6时41分,这就是它的读数(分秒准确)

enter image description here

+1

1.将日期列存储在'date/datetime'类型的列中是一种糟糕的做法2.您对时区有什么了解? – zerkms

+0

我强烈建议在数据库中的日期字段是bigint,所以你可以把时间()而不是日期()。它独立于数据库并且没有问题。然后,您可以阅读日期,如日期('FORMAT',$ TS_FROM_DB) – Scony

+0

这是在我的个人电脑上运行。据我所知,它应该抓住我的电脑系统时间。是? –

回答

0

试试这个...

// you need to find your timezone here: http://php.net/manual/en/timezones.php 
$timezone = new DateTimeZone('America/New_York'); 

$date_obj = new DateTime("now", $timezone); 
$date_obj->setTimezone(new DateTimeZone('UTC')); 

$date = $date_obj->format('Y-m-d H:i:s'); 

$sql = "INSERT INTO logs (ip, date, page) VALUES ('$ip', '$date', '$page')"; 
print $sql; 

更多关于DateTime

你应该确实将日期存储为datetime,而不是一个字符串...此外,我会高度考虑将所有日期存储为UTC。这样,你总是知道什么时候完成了,而且不是相对的。您可以在任何适合的时区内将日期显示回用户。如果你想使这两个chages的,您的查询就会变成:

$sql = "INSERT INTO logs (ip, date, page) VALUES ('$ip', UTC_TIMESTAMP(), '$page')"; 

而且,请注意,在这里张贴的其他搜索解决方案... getdate()一个MySQL的功能,它是专为SQL Server。如果你在任何函数名称周围包含引号,MySQL将把整个事件解释为一个字符串而不是一个函数。

0

我读过日期()已被弃用。

所以,我个人使用strftime()。

例如以获得微秒印章的时间:

<?php 
    echo "Hello world!<br/>"; 
    echo "We are the ".strftime("%d %B %Y")."<br/>"; 
    echo "and it is now ".strftime("%I:%M:%S %p")." and ".(float)microtime()." ms.<br/>"; 
?> 

希望这会有所帮助。

+1

'date()'已弃用?任何来源? – Pang

+0

只需在php.ini中有以下语句:error_reporting = E_ALL,如果使用date(),则会收到警告消息! – Fnux