Laravel 不接受来自带有 axios 的 Vuex 的 Js 日期格式,捕获 500 内部错误
Lavarel don't accept Js Date format from Vue with axios, catch an 500 Internal Error
我有一个 Vue 组件,通过 axios 请求传递日期。
我有一个介绍日期的输入,例如。 (“2021-03-06”),它正在工作,但如果我使用 datePicker,它就不会。
public function store()
{
$attributes = request();
Task::create([
'name' => $attributes['name'],
'client_id' => $attributes['client_id'],
'task_date' => $attributes['task_date'],
'state' => 1,
'type' => $attributes['type'],
'details' => $attributes['details'],
'invoiced_date' => $attributes['invoiced_date'],
'programing_worked_minutes' => $attributes['programing_worked_minutes'],
'support_worked_minutes' => $attributes['support_worked_minutes'],
'closed_date' => null,
]);
return 1;
}
<datepicker
v-model="task.task_date"
:lower-limit="new Date()"
placeholder="click here to choose a date"
id="task_date"
name="task.task_date"
class="block rounded p-0 shadow-inner border-gray-300 w-1/2"
required
/>
export default {
name: "addTask",
components: {
Datepicker
},
data() {
return {
task: {
name: null,
client_id: null,
task_date: null,
type: null,
details: null,
invoiced_date: null,
programing_worked_minutes: null,
support_worked_minutes: null,
},
message: "",
visual_spinner: false,
}
},
methods: {
sendData() {
this.message = '';
this.visual_spinner = true;
axios.post('/create-task', {
name: this.task.name,
client_id: this.task.client_id,
task_date: this.task.task_date,
type: this.task.type,
details: this.task.details,
invoiced_date: this.task.invoiced_date,
programing_worked_minutes: this.task.programing_worked_minutes,
support_worked_minutes: this.task.support_worked_minutes,
})
.then((response) => {
this.onSuccess();
})
.catch(function (error) {
console.log(error);
});
},
因此,请求运行良好,问题在于格式 Date ,
如果 2021-03-01 它在工作,但如果它是
2021 年 3 月 13 日星期六 00:00:00 GMT+0200(东欧标准时间) 不工作
谢谢
2021 年 3 月 7 日星期日 00:17:59 GMT+0600(孟加拉国标准时间)与 2021-03-07 不一样。
500 internal error 表示服务器端发生了一些事情。
我想,问题出在您的 Laravel 数据库架构
例如:$table->dateTime('task_date');
替换为 $table->string('task_date');
然后迁移。
如果问题出在日期格式上,您可以在将其提交到数据库之前将其格式化为预期的格式。
一旦 JavaScript 日期格式 Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
被 Laravel 接收到,您可以使用框架自带的 Carbon PHP library 对其进行格式化。即:
use Carbon\Carbon;
$javaScriptDateFormat = "Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)";
$date = explode("(", $javaScriptDateFormat, 2)[0];
$formattedDate = Carbon::parse($date)->format('Y-m-d');
print_r($formattedDate); // "2021-03-13"
附录
另一种选择是,您可以使用 Moment.js 将从 datePicker
Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
获得的 'date string' 格式化为预期格式 before 将其发送到服务器。即:
import moment from "moment";
const date = new Date("Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)");
console.log(moment(date).format("YYYY-MM-DD")); // 2021-03-13
因为 Moment.js has been discontinued, as suggested by @AnuratChapanond, use Day.js 而不是替代。
import dayjs from "dayjs";
const date = new Date("Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)");
console.log(dayjs(date).format("YYYY-MM-DD")); // 2021-03-13
终于用上了
formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
转换
Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
进入 2021-03-13
我有一个 Vue 组件,通过 axios 请求传递日期。
我有一个介绍日期的输入,例如。 (“2021-03-06”),它正在工作,但如果我使用 datePicker,它就不会。
public function store()
{
$attributes = request();
Task::create([
'name' => $attributes['name'],
'client_id' => $attributes['client_id'],
'task_date' => $attributes['task_date'],
'state' => 1,
'type' => $attributes['type'],
'details' => $attributes['details'],
'invoiced_date' => $attributes['invoiced_date'],
'programing_worked_minutes' => $attributes['programing_worked_minutes'],
'support_worked_minutes' => $attributes['support_worked_minutes'],
'closed_date' => null,
]);
return 1;
}
<datepicker
v-model="task.task_date"
:lower-limit="new Date()"
placeholder="click here to choose a date"
id="task_date"
name="task.task_date"
class="block rounded p-0 shadow-inner border-gray-300 w-1/2"
required
/>
export default {
name: "addTask",
components: {
Datepicker
},
data() {
return {
task: {
name: null,
client_id: null,
task_date: null,
type: null,
details: null,
invoiced_date: null,
programing_worked_minutes: null,
support_worked_minutes: null,
},
message: "",
visual_spinner: false,
}
},
methods: {
sendData() {
this.message = '';
this.visual_spinner = true;
axios.post('/create-task', {
name: this.task.name,
client_id: this.task.client_id,
task_date: this.task.task_date,
type: this.task.type,
details: this.task.details,
invoiced_date: this.task.invoiced_date,
programing_worked_minutes: this.task.programing_worked_minutes,
support_worked_minutes: this.task.support_worked_minutes,
})
.then((response) => {
this.onSuccess();
})
.catch(function (error) {
console.log(error);
});
},
因此,请求运行良好,问题在于格式 Date , 如果 2021-03-01 它在工作,但如果它是 2021 年 3 月 13 日星期六 00:00:00 GMT+0200(东欧标准时间) 不工作
谢谢
2021 年 3 月 7 日星期日 00:17:59 GMT+0600(孟加拉国标准时间)与 2021-03-07 不一样。
500 internal error 表示服务器端发生了一些事情。
我想,问题出在您的 Laravel 数据库架构
例如:$table->dateTime('task_date');
替换为 $table->string('task_date');
然后迁移。
如果问题出在日期格式上,您可以在将其提交到数据库之前将其格式化为预期的格式。
一旦 JavaScript 日期格式 Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
被 Laravel 接收到,您可以使用框架自带的 Carbon PHP library 对其进行格式化。即:
use Carbon\Carbon;
$javaScriptDateFormat = "Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)";
$date = explode("(", $javaScriptDateFormat, 2)[0];
$formattedDate = Carbon::parse($date)->format('Y-m-d');
print_r($formattedDate); // "2021-03-13"
附录
另一种选择是,您可以使用 Moment.js 将从 datePicker
Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
获得的 'date string' 格式化为预期格式 before 将其发送到服务器。即:
import moment from "moment";
const date = new Date("Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)");
console.log(moment(date).format("YYYY-MM-DD")); // 2021-03-13
因为 Moment.js has been discontinued, as suggested by @AnuratChapanond, use Day.js 而不是替代。
import dayjs from "dayjs";
const date = new Date("Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)");
console.log(dayjs(date).format("YYYY-MM-DD")); // 2021-03-13
终于用上了
formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
转换
Sat Mar 13 2021 00:00:00 GMT+0200 (Eastern European Standard Time)
进入 2021-03-13