\在PHP中做什么?
例如,CSRF4PHP有\FALSE,\session_id和\Exception:
public function __construct($timeout=300, $acceptGet=\FALSE){
$this->timeout = $timeout;
if (\session_id()) {
$this->acceptGet = (bool) $acceptGet;
} else {
throw new \Exception('Could not find session id', 1);
}
}
Run Code Online (Sandbox Code Playgroud) 事先,我已经读过这个问题:
如何防止PHP将带有0000-00-00值的DateTime对象转换为-0001-11-30
但是当我运行这段代码时,我不知道为何 00:00:00更改为-0001-11-30 00:00:00:
$date = date_create('0000-00-00 00:00:00');
echo date_format($date, 'Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)
当我用0001-00-00 00:00:00尝试时,我得到:
0000-11-30 00:00:00
Run Code Online (Sandbox Code Playgroud)
和0001-01-01 00:00:00我得到:
0001-01-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
和0000-00-01 00:00:00:
-0001-12-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
是否有任何具体原因导致它在不存在的日期之前总是一年/一天/一个月?
函数date_create或date_format有问题吗?
我注意到时间以正确的方式显示,这可能是因为时间00:00:00存在.
当我尝试修改我的资源模型的默认created_at字段的格式时,我收到以下错误:
{
"error":{
"type":"InvalidArgumentException",
"message":"Unexpected data found.
Unexpected data found.
The separation symbol could not be found
Unexpected data found.
A two digit second could not be found",
"file":"\/var\/www\/html\...vendor\/nesbot\/carbon\/src\/Carbon\/Carbon.php",
"line":359
}
}
Run Code Online (Sandbox Code Playgroud)
以下是产生上述错误的代码:
$tile = Resource::with('comments, ratings')->where('resources.id', '=', 1)->first();
$created_at = $tile->created_at;
$tile->created_at = $created_at->copy()->tz(Auth::user()->timezone)->format('F j, Y @ g:i A');
Run Code Online (Sandbox Code Playgroud)
如果我->format('F j, Y @ g:i A')从上面的代码中删除它,它工作正常,但它不是我想要的格式.问题是什么?我的应用程序中的其他地方几乎完全相同的代码,它可以正常工作.
更新:
使用setToStringFormat('F j, Y @ g:i A')不会导致错误,但会返回null.
我想DateTime用Leap Seconds进行一些计算,但是它很早就停止了,因为我听不懂DateTime我的意思:
### June 30, 2012 at 23:59:60 UTC ###
$leap = new DateTime('2012-06-30T23:59:60UTC');
var_export($leap);
Run Code Online (Sandbox Code Playgroud)
输出:
DateTime::__set_state(array(
'date' => '2012-07-01 00:00:00',
'timezone_type' => 3,
'timezone' => 'UTC',
))
Run Code Online (Sandbox Code Playgroud)
我无法为DateTime去年的UTC leap秒创建一个(我尝试过的其他leap秒也无法创建)。我想知道是否完全DateTime支持leap秒,我以为它支持UTC,但可能不支持leap秒,所以仅支持GMT吗?
当我的MySQl日期为空时,PHP将它们返回为"-0001-11-30 00:00:00".
我知道这是因为我正在使用欧洲时区,但我该如何处理呢?
我一直在:
InvalidArgumentException in Carbon.php line 425:
Unexpected data found.
in Carbon.php line 425
at Carbon::createFromFormat('Y-m-d H:i:s', '-0001-11-30 00:00:00') in Model.php line 2915
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
米克
注意:这不同于: 你如何解释新的\ DateTime('0000-00-0000:00 00:00')的结果?
这是不同的,因为我问我应该怎么做.
我有一个列viewedAt是a DATETIME并接受NULL值.在每条新记录上设置该列是一个软件限制,0000-00-00 00:00:00因此我使用Symfony和Doctrine进行简单的操作,如下所示:
$entEmail = new Email();
$entEmail->setViewedAt(new \DateTime('0000-00-00 00:00:00'));
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是PHP改变了这个日期-0001-11-30 00:00:00,MySQL服务器中的SQL模式设置为STRICT,因此查询失败.我已阅读主题的LOF这里这个,这个和其他一些,但没有回答我的疑问都没有.我已经用PHP做了一些测试,我得到了几乎相同的结果:
$date = new DateTime("0000-00-00 00:00:00", new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d h:i:s');
// outputs
// -0001-11-30 12:00:00
Run Code Online (Sandbox Code Playgroud)
即使设置了MySQL模式,STRICT我也测试了以下查询,它的工作方式如下图所示:
INSERT INTO emails(`emails_category`, `deliveredAt`, `viewedAt`, `data`, `createdAt`, `updatedAt`, `reps_id`, `targets_id`) VALUES ("sent","2015-10-29 06:08:25","0000-00-00 00:00:00",null,"2015-10-29 06:08:25","2015-10-29 06:08:25","005800000058eYcAAI","0018000001GO8omAAD")
Run Code Online (Sandbox Code Playgroud)
因此,viewedAt在接受0000-00-00 00:00:00该值,即使是无效的(我认为这是一种空左右)
我怎么解决这个问题?有什么工作吗?在这个软件要求无法更改的特定情况下,您对我提出了什么建议?
我正在使用Symfony 2.7.6,Doctrine 2.5.2和PHP 5.5.30
php ×5
datetime ×2
php-carbon ×2
date ×1
doctrine-orm ×1
laravel ×1
laravel-4 ×1
leap-second ×1
mysql ×1
namespaces ×1
opcache ×1
opcode ×1
symfony ×1