我正在尝试从XML文件中解析日期,并以与原始日期相同的格式返回字符串中的日期,但提前8小时除外。
原始日期采用以下格式:
'YYYY-MM-DDTHH:MM:ss.ffff'
所以日期总是固定的长度
示例:'2013-10-06T14:00:40.1000'
在这种情况下使用date_parse()和date_modify()函数的适当方法是什么?
当前代码:
public function setTimeSeriesStartDate(){
//FIXME
//replace T with space to make it parsable by date_parse()
$tempDate = $this->date;
$tempDate[10] = ' ';
$parsedDate = new DateTime(date_parse($tempDate));
$parsedDate->modify('-'.$this->daysBeforeEvent.' day');
$farmattedDate=$parsedDate->format('Y-m-d H:i:s');
if($formattedDate){
$this->timeSeriesStartDate= $formattedDate;
$this->timeSeriesStartDate[10]='T';
}
else {$this->timeSeriesStartDate = $this->date;}
}
Github上的相应问题:https://github.com/felakuti4life/Seismokraft/issues/1
答案 0 :(得分:3)
我认为它实际上比你做到的更简单。以下应该有效:
//$tempDate = $this->date; <-- REMOVE
//$tempDate[10] = ' '; <-- REMOVE
$parsedDate = new DateTime($tempDate);
$parsedDate->modify('-8 hours');
或
//$tempDate = $this->date; <-- REMOVE
//$tempDate[10] = ' '; <-- REMOVE
$parsedDate = new DateTime($tempDate);
$parsedDate->sub(new DateInterval('PT8H'));
<强> See it in action 强>
答案 1 :(得分:0)
$tempDate = $this->date;
$tempDate = date_add($tempDate,date_interval_create_from_date_string("-8 hours"));
$tempDate = date_format($tempDate,"Y/m/d H:i:s");