0

这就是我想要实现的目标:

1)用户从表单提交 roster_input(这里我只是设置一个变量作为示例输入)

2)php将其更改为时间戳并减去7500秒

3)php显示新时间,但在不同的时区

显然我做错了。但这是我第一次处理约会!

$roster_input='14:15' ;
$timestamp = strtotime($roster_input) - 7500;

$date = new DateTime($timestamp, new DateTimeZone('Pacific/Nauru'));
echo $date;

也试过了,没有成功:

$date = DateTime::createFromFormat('H:i', $timestamp, new DateTimeZone('Pacific/Nauru'));
4

3 回答 3

1

根据 PHP 手册

$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

因此,您将使用有效的日期字符串:

这行得通。返回 12:10

$roster_input='14:15' ;

$timestamp = strtotime($roster_input)  - 7500;

$format =  date("H:i", $timestamp );

$date = new DateTime($format, new DateTimeZone('Pacific/Nauru'));
    echo $date->format('H:i') . "\n"; //Note how you echo the result

失败(在您的情况下直接使用时间戳);

$roster_input='14:15' ;

$timestamp = strtotime($roster_input)  - 7500;

$date = new DateTime($timestamp , new DateTimeZone('Pacific/Nauru'));
    echo $date->format('H:i') . "\n";

致命错误:未捕获的异常“异常”,带有消息“DateTime::_ construct() [datetime.--construct]:无法在 writecodeonline.com/php 中的位置 8 (0) 解析时间字符串 (1362417000):意外字符” :7 堆栈跟踪:#0 writecodeonline.com/php(7): DateTime-> _construct('1362417000', Object(DateTimeZone)) #1 {main} 在第 7 行抛出

要直接使用时间戳,这可行:返回 17:10

$roster_input='14:15' ;

$timestamp = strtotime($roster_input)  - 7500;

$date = new DateTime('@'.$timestamp , new DateTimeZone('Pacific/Nauru')); //Notice '@'.
    echo $date->format('H:i') . "\n";

哪个适合您的目标结果。请注意不同的结果阅读更多:http ://www.php.net/manual/en/datetime.construct.php

于 2013-03-04T14:40:28.253 回答
0

你似乎走在正确的轨道上。唯一的问题是您不能将对象作为字符串转储。

尝试将最后一行更改为:

echo $date->format("c");
于 2013-03-04T14:05:44.560 回答
0

或者对您的原件进行 3 个字符的更改:

$roster_input='14:15';
$timestamp = strtotime($roster_input) - 7500;
$date = new DateTime("@$timestamp", new DateTimeZone('Pacific/Nauru'));
echo $date->format(DATE_RFC822);
于 2013-03-04T14:52:25.090 回答