Javascript 输入=";日期“;保存后数据库中的值无效

Javascript 输入=";日期“;保存后数据库中的值无效,javascript,mysql,angularjs,Javascript,Mysql,Angularjs,从日期选择器输入type=“date”中拾取日期后,它被错误地存储到数据库中 我从datepicker中选择日期,然后使用AngularJS将其发送给Spring MVC angularJS: $scope.updateProjectDetails = function(detail) { $http.post('${pageContext.request.contextPath}/api/details', detail) .then(function(response) {

从日期选择器输入type=“date”中拾取日期后,它被错误地存储到数据库中

我从datepicker中选择日期,然后使用AngularJS将其发送给Spring MVC

angularJS:

$scope.updateProjectDetails = function(detail) {
    $http.post('${pageContext.request.contextPath}/api/details', detail)
    .then(function(response) {
        console.log(response)
    });
}
chrome控制台:

config: {method: "POST", transformRequest: Array(1), transformResponse: Array(1), paramSerializer: ƒ, url: "/editor-application/api/details", …}
data:
date: 1557439200000
hours: 2
id: 76
projectId: 53
1557439200000->2019年10月5日上午12:00:00

然后将JSON发布到MVC机制:

控制器:

@PostMapping(path = "/details")
public ProjectDetails updateProjectDetails(@RequestBody ProjectDetails details) {

    details.setId(0);
    editorService.updateProjectDetails(details);
    return details;
}  
dao:

和数据库:

76 2019-05-09 253


日期始终为-1天,我知道存在时区问题,但我应该如何解决它?

我总是发现以下方法有效:

// from the server
$http.get('myDate').then(date => // date === 1557439200000
    new Date(date-(new Date(date).getTimezoneOffset()*60*1000)).toISOString().slice(0,10)
)

这有点陈词滥调,但完成了任务。

1557439200000
=(格林威治标准时间)2019年5月9日星期四晚上10:00:00。为什么您会期望不同的时间?UTC时间和日期:2019年5月9日星期四22:00:00,本地时间和日期:2019年5月10日星期五00:00:00,但您没有包括任何时区偏移或位置标识。由于缺乏详细信息,因此假定为GMT(或UTC)。您需要为您的位置偏移或将日期字符串转换为UTC,并将DB设置为匹配。
// from the server
$http.get('myDate').then(date => // date === 1557439200000
    new Date(date-(new Date(date).getTimezoneOffset()*60*1000)).toISOString().slice(0,10)
)