如何使 CakePHP 3 次对象在 AJAX 和 PHP 之间保持一致?
How can I make a CakePHP 3 time object remain consistent between AJAX and PHP?
当我加载带有 Time 对象的页面并通过 PHP 在页面上回显时,我得到:
<?= $user->last_login ?>
// 12/30/14, 5:21 pm
当我通过 ajax 加载数据时,它 return 给我的是这样的:
console.log(response.user.last_login);
// 2014-12-30T17:21:31+0000
我没有设置任何与默认 CakePHP 3 设置不同的东西,我需要添加到页面的事件(return 通过 ajax 编辑)时间格式与页面加载时拉取的事件相同(return 通过 PHP)。
您可以使用 javascript Date object
转换日期格式
var date = new Date(response.user.last_login)
//returns a timestamp of 1419960091000
var n = date.getTime();
var day = date.getDate();
var month = date.getMonth();
month = month + 1;
//increment the month by 1 as it starts from 0
var year = date.getFullYear();
year = year.toString().substr(2,2);
//this removes the first 2 characters to give yy, remove the above line for yyyy
var hours = date.getHours();
var minutes = date.getUTCMinutes();
var period='am';
if(hours==0){ //At 00 hours we need to show 12 am
hours=12;
}
else if(hours>12){
hours=hours%12;
//remove the above line for 24 hour format
period='pm';
}
现在您可以按照要求的格式拼凑日期
var last_login = day + '/' + month + '/' + year + ' ' + hours + ':' + minutes + ' ' + period;
//gives 30/12/14 5:21 pm
希望对您有所帮助!
Time 对象的默认字符串格式输出由 setToStringFormat
方法控制 http://book.cakephp.org/3.0/en/core-libraries/time.html#setting-the-default-locale-and-format-string
最好不要在此处对格式进行硬编码,而是仅更改当前语言环境以便为您选择正确的格式,
但是用于编码为 json 的格式无法通过配置来控制它,因为在 JSON API。相反,您可以做的是更改 User
实体中的 jsonSerialize
方法:
public function jsonSerialize() {
$toEncode = parent::jsonSerialize();
return ['last_login' => (string)$this->last_login] + $toEncode;
}
它所做的是在将 last_login
属性 编码为 json 之前将其转换为字符串。转换为字符串将使用全局配置的 toString
格式。
当我加载带有 Time 对象的页面并通过 PHP 在页面上回显时,我得到:
<?= $user->last_login ?>
// 12/30/14, 5:21 pm
当我通过 ajax 加载数据时,它 return 给我的是这样的:
console.log(response.user.last_login);
// 2014-12-30T17:21:31+0000
我没有设置任何与默认 CakePHP 3 设置不同的东西,我需要添加到页面的事件(return 通过 ajax 编辑)时间格式与页面加载时拉取的事件相同(return 通过 PHP)。
您可以使用 javascript Date object
转换日期格式var date = new Date(response.user.last_login)
//returns a timestamp of 1419960091000
var n = date.getTime();
var day = date.getDate();
var month = date.getMonth();
month = month + 1;
//increment the month by 1 as it starts from 0
var year = date.getFullYear();
year = year.toString().substr(2,2);
//this removes the first 2 characters to give yy, remove the above line for yyyy
var hours = date.getHours();
var minutes = date.getUTCMinutes();
var period='am';
if(hours==0){ //At 00 hours we need to show 12 am
hours=12;
}
else if(hours>12){
hours=hours%12;
//remove the above line for 24 hour format
period='pm';
}
现在您可以按照要求的格式拼凑日期
var last_login = day + '/' + month + '/' + year + ' ' + hours + ':' + minutes + ' ' + period;
//gives 30/12/14 5:21 pm
希望对您有所帮助!
Time 对象的默认字符串格式输出由 setToStringFormat
方法控制 http://book.cakephp.org/3.0/en/core-libraries/time.html#setting-the-default-locale-and-format-string
最好不要在此处对格式进行硬编码,而是仅更改当前语言环境以便为您选择正确的格式,
但是用于编码为 json 的格式无法通过配置来控制它,因为在 JSON API。相反,您可以做的是更改 User
实体中的 jsonSerialize
方法:
public function jsonSerialize() {
$toEncode = parent::jsonSerialize();
return ['last_login' => (string)$this->last_login] + $toEncode;
}
它所做的是在将 last_login
属性 编码为 json 之前将其转换为字符串。转换为字符串将使用全局配置的 toString
格式。