2014-10-31 58 views
0

我有一个PHP脚本,它将格式为2014-10-31T11:28:02+00:00的时间戳字符串传递给另一个变量。我怎么能从这里减去一小时?更改时间-1小时

例如:

$currDate = $userDate - strtotime('-1 hour');

$userDate包含2014-10-31T11:28:02+00:00

谢谢。

+10

你尝试之前,在这里搜索问? – 2014-10-31 11:44:28

+3

http:// php。net/datetime - DateTime类是一件好事。 – 2014-10-31 11:45:43

+0

................. + 1 – 2014-10-31 12:06:54

回答

0

strtotime()是在类似于输出time()让你秒的时间戳转换为时间。

也就是说,代码strtotime("-1 hour")将无法​​正常工作。

什么,但是你可以做的是用户时间戳转换为时间(秒),然后从这一减一小时后,像这样

$currDate = strtotime($userDate) - 3600; // 1 hour has 3600 seconds 

,然后再转换$currDate回时间戳,通过做这样的事情

$finalDate = date("YYYY-mm-dd HH:ss", $currDate); // adjust the format to your needs 

的方式格式化使用date()作品可以发现here

希望有帮助。

+0

只需注意: 'date()'的所有可用格式字符的列表,请参考[官方PHP手册文档](http://php.net/date)。 – 2014-10-31 11:52:10

0

你可以使用:

 
$currDate = strtotime($userDate) - 3600; 

如果你想保留$userDate的格式,那么这样做:

 
$newUserDate = date("c", strtotime($userDate) - 3600); 
0

使用DateTime类。

  • 从您需要的日期格式
  • 在你想要的格式创建DateTime对象减去小时
  • 回声的新日期

$date = DateTime::createFromFormat('Y-m-d\TG:i:sP', '2014-10-31T11:28:02+00:00'); 
$date->sub(new DateInterval('PT1H')); 
echo $date->format('Y-m-d\TG:i:sP'); 

https://eval.in/214784

+0

日期采用ISO 8601格式,所以您不需要明确指定格式,因为PHP的日期解析器已经识别了它。你可以简单地写:'$ date = new DateTime($ userDate);'。对于格式化,可以使用['$ date-> format('c');'](http://php.net/date)。 – 2014-10-31 11:50:57

+0

您只能使用'c'格式输出ISO 8601日期。另外,由于输入日期是ISO 8601日期,所以不需要格式化输入,您可以直接输入新日期时间('2014-10-31T11:28:02 + 00:00')' – AlexL 2014-10-31 11:51:27

1

试试这个:

$str = '2014-10-31T11:28:02+00:00'; 

$dt = DateTime::createFromFormat(DateTime::ISO8601, $str); 
$dt->modify("-1 hours"); 
echo $dt->format(DateTime::ISO8601); 
0

我认为问题是日期格式。日期和时间戳之间必须有空格。以下作品完美。

$userDate='2014-10-31 T11:28:02+00:00'; 
echo $currDate = $d= date('d-m-Y',strtotime($userDate. " -1 hour")); 
0
$currDate = date('Y-m-d', strtotime($userDate .'-1 hour')); 

试试这个...........在 “年月日” 你把你喜欢的格式为 “YMD H:我:■”