我想更改国家/地区的时区,因此当用户删除对象时,我可以将用户所在国家/地区的$ timestamp设置为与该对象相关的行。
我将一个函数调用到我的控制器中:
$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中我必须以另一种方式改变。
你能帮帮我吗?
谢谢!
答案 0 :(得分:0)
这看起来对我来说不必要的复杂。我建议使用Cake / PHP提供的日期/时间API,时区调整应该是一个蛋糕,你可以简单地将\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
列不是date-time-ish类型(最好是),只需将对象格式化为字符串:
$turno->fechaBaja = $now->toDateTimeString(); // formats as Y-m-d H:i:s
另见