Php 更改时间戳取决于用户';在卡基的国家3
我想更改国家的时区,这样当用户删除一个对象时,我可以将$timestamp从用户的国家设置为与该对象相关的行 我在控制器中调用一个函数,如下所示:Php 更改时间戳取决于用户';在卡基的国家3,php,cakephp,timezone,cakephp-3.0,Php,Cakephp,Timezone,Cakephp 3.0,我想更改国家的时区,这样当用户删除一个对象时,我可以将$timestamp从用户的国家设置为与该对象相关的行 我在控制器中调用一个函数,如下所示: $turno = $this->Turnos->get($id); $countryid= $this -> Auth -> User()['countryid']; $datos = getHoraDiaMesAnio($countryid); $fechaActual = date('Y-m-d',st
$turno = $this->Turnos->get($id);
$countryid= $this -> Auth -> User()['countryid'];
$datos = getHoraDiaMesAnio($countryid);
$fechaActual = date('Y-m-d',strtotime($datos[2]."-".$datos[1]."-".$datos[0]));
$dia = $datos[0]; $mes = $datos[1]; $anio = $datos[2];
$horaActual = date('H:i',strtotime($datos[4]));
$hora = $datos[5];
$timestamp = $anio."-".$mes."-".$dia." ".$hora;
$turno->fechaBaja = $timestamp;
//$turno->fechaBaja = $result;
if ($this->Turnos->save($turno)) {
$this->Flash->success(__('El turno se ha eliminado.'));
} else {
$this->Flash->error(__('El turno no se ha podido eliminar. Por favor intente de nuevo.'));
}
return $this->redirect(['action' => 'index']);
这是我的职责:
function getHoraDiaMesAnio($countyid){
switch ($countyid){
case 1://Argentina
date_default_timezone_set('America/Argentina/Buenos_Aires');
putenv('TZ=America/Argentina/Buenos_Aires');
break;
case 2://Bolivia
date_default_timezone_set('America/La_Paz');
putenv('TZ=America/La_Paz');
break;
$dia= date("j");
$mes= date("m");
$anio= date("Y");
$horaRedondeada = date("H:00");
$horaExacta = date("H:i");
$horaCompleta = date("H:i:s");
return array($dia,$mes,$anio,$horaRedondeada,$horaExacta,$horaCompleta);`
问题是,时间戳从未正确设置。在其他服务中(不使用cakephp)可以完美地工作。我认为在cakephp中,我必须以另一种方式改变
你能帮我吗
谢谢 对我来说,这看起来太复杂了。我建议使用Cake/PHP提供的日期/时间API,时区调整应该是一个Cake,如果列是日期-时间类型,您可以简单地将
\DateTimeInterface
对象传递到保存过程中
$now = \Cake\Chronos\Chronos::now(); // uses the default app timezone, see the
// date_default_timezone_set() call in bootstrap.php
switch ($countryid) {
case 1:
$now = $now->setTimezone('America/Argentina/Buenos_Aires');
break;
case 2:
$now = $now->setTimezone('America/La_Paz');
break;
}
$turno->fechaBaja = $now;
如果fechaBaja
列不是日期时间类型(最好是这样),只需将对象格式化为字符串:
$turno->fechaBaja = $now->toDateTimeString(); // formats as Y-m-d H:i:s
另见
2017-06-04 16:11:28
。。。可能您的服务器时间设置不正确,或者未调用setTimezone()
?更改时区前后(debug($now)
)设置的$now
是什么?结果:2017-06-04 19:31:03调试:2017-06-04 19:31:03 2017-06-04 19:31:03调试:2017-06-04 16:31:03。因此,新的日期时间没有问题,但在我的数据库中,现在设置为2017-06-04 11:44:51编辑:结果:2017-06-04 19:31:03调试:2017-06-04 19:31:03 2017-06-04 19:31:03调试:2017-06-04 16:31:03。因此,新的日期时间没有问题,但在我的数据库中,现在设置为2017-06-04 12:31:03@FaustinoGagneten这就是MySQL中的TIMESTAMP
类型所做的,它“将时间戳值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。”如果需要避免这种行为,应该使用DATETIME
。