我目前在数据库中使用'time()‘函数存储时间。但是,它使用的是服务器的时区,我希望每个用户都能根据他们的时区(在他们的配置文件中设置)来查看时间。
如何进行时间戳转换?(我指的是从时间戳到时间戳,而不是从可读时间)
发布于 2010-05-14 21:36:43
正如Joonas所说,UNIX时间戳根据定义是UTC,但如果您真的需要的话,您可以将类似这样的东西组合在一起来模拟特定于时区的时间戳:
// PHP 5.3 - OO Code
$timestamp = time();
echo 'Unix timestamp: ' . $timestamp;
$dt = DateTime::createFromFormat('U', $timestamp);
$dt->setTimeZone(new DateTimeZone('America/New_York'));
$adjusted_timestamp = $dt->format('U') + $dt->getOffset();
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;
// PHP 5.3 - Procedural Code
$timestamp = time();
echo 'Unix timestamp: ' . $timestamp;
$dt = date_create_from_format('U', $timestamp);
date_timezone_set($dt, new DateTimeZone('America/New_York'));
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt);
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;发布于 2012-06-05 22:05:26
实际上,您不应该修改时间戳本身来更改其中的日期,您应该在将格式化的日期戳呈现给用户之前将时区应用于时间戳。
这是Mike的代码的修改版本,可以在php.net上找到PHP5 >= 5.2.0
// OO Code
$st = 1170288000 // a timestamp
$dt = new DateTime("@$st");
$dt->setTimeZone(new DateTimeZone('America/New_York'));
$adjusted_timestamp = $dt->format('U') + $dt->getOffset();
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;
// Procedural Code
$st = 1170288000 // a timestamp
$dt = date_create("@$st");
date_timezone_set($dt, timezone_open('America/New_York'));
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt);
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp;发布于 2010-05-14 21:13:39
根据定义,UNIX时间戳使用UTC,这意味着所有转换都应该在打印输出之前完成,而不是使用实际的时间戳。
然而,如何做到这一点取决于您当前如何格式化它们。我相信PHP有内置的时区处理。
https://stackoverflow.com/questions/2834353
复制相似问题