【发布时间】:2010-10-07 02:27:24
【问题描述】:
嗨,我正在通过 odbc 使用 php 和 sql 来编写程序,但我有点卡在我想以 date('Ymd H:i:s) 格式显示当前日期/时间的部分,但是它只显示格林威治标准时间。我想增加 8 小时。你们中的任何人都可以帮助我吗。非常感谢
【问题讨论】:
嗨,我正在通过 odbc 使用 php 和 sql 来编写程序,但我有点卡在我想以 date('Ymd H:i:s) 格式显示当前日期/时间的部分,但是它只显示格林威治标准时间。我想增加 8 小时。你们中的任何人都可以帮助我吗。非常感谢
【问题讨论】:
查看date_default_timezone_set。您可以执行以下操作:
date_default_timezone_set('America/Los_Angeles');
print 'Current datetime is: ' . date('Y-m-d H:i:s');
您可以使用它将时区设置为您需要时间到达的任何时区,然后正常使用date。或者,您可以使用strtotime:
print 'Current datetime is: ' date('Y-m-d H:i:s', strtotime('+8 hours'));
【讨论】:
如果您正在寻找一种在用户本地时间显示时间戳的方法,您可以使用 JavaScript:
function showtime(t)
{
if (t == 0)
{
document.write("never");
return;
}
var currentTime = new Date(t);
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();
var seconds = currentTime.getSeconds();
document.write();
if (minutes < 10){
minutes = "0" + minutes;
}
if (seconds < 10){
seconds = "0" + seconds;
}
document.write(month + "/" + day + "/" + year + " " +
hours + ":" + minutes + ":" + seconds + " ");
if(hours > 11){
document.write("PM");
} else {
document.write("AM");
}
}
如果你需要显示时间,只需在 HTML 中调用它并从 PHP 中拼接值:
<script type="text/javascript">showtime(<?=$time."000"?>)</script>
【讨论】:
我会避开时区方法。
如果我理解正确,你想增加时间,从而改变它。例如,现在已经创建了一个任务,并且必须在 8 小时内完成。 timezone 方法只会更改日期和时间的显示。仅当您知道访问者的时区时才更改时区设置,并且日期时间必须相对于他们显示。
现在:1234418228 在蒙特利尔是 2009/02/12 00:57:08,在旧金山是 2009/02/11 09:57:08。这是完全相同的时刻。
附加到第一个答案,date() 和 strtotime() 是你的朋友。
strtotime("+8 小时", $now ) $now 是它应该关联的时间戳。因此,如果您的开始时间不是 time(),您仍然可以使用它。例如
strtotime( "+8 hours", strtotime( "2009/03/01 00:00:00" ); (8AM on 2009/03/01)
但是,在处理以周或更短时间计算的间隔时,我更喜欢“数学”来处理
$StartTime = strtotime( "2009/03/01 13:00:00" );
$EndTime = $StartTime + ( 8 * 60 * 60 );
date( "Y/m/d H:i:s", $EndTime ) ==> "2009/03/01 21:00:00"
一小时 3600 秒,一天 86400 秒。
您不能在几个月、几个季度或几年内使用此方法,因为它们持续的秒数会因时间而异。
【讨论】:
如果您想使用某个时区的时间,则首选使用 date_default_timezone_set()。无论如何,您可以为 date() 函数提供另一个参数:int 时间戳。一个整数,表示您希望 date() 返回有关信息的时间戳。 所以如果你现在想显示 date('Y-m-d H:i:s') 你可以使用这个:
$now = date('Y-m-d H:i:s', time() ); // time() returns current timestamp.
// if you omit the second parameter of date(), it will use current timestamp
// by default.
$_8hoursLater = date('Y-m-d H:i:s', time()+60*60*8 );
$_8hoursBefore = date('Y-m-d H:i:s', time()-60*60*8 );
【讨论】: