【问题标题】:input="date" invalid value in database after save保存后输入=“日期”数据库中的无效值
【发布时间】:2019-05-10 11:15:13
【问题描述】:

从input type="date", date-picker中选择日期后,错误地存入数据库。

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

angularJS:

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

镀铬控制台:

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 年 5 月 10 日凌晨 12:00:00

然后将JSON发布到MVC机制:

控制器:

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

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

道:

@Override
@Transactional
public void updateProjectDetails(ProjectDetails details) {

    Session currentSession = sessionFactory.getCurrentSession();
    currentSession.saveOrUpdate(details);
}

和数据库:

76 2019-05-09 2 53

日期总是-1天,我知道时区有问题,但我应该如何解决呢?

【问题讨论】:

  • 1557439200000 = (GMT) 2019 年 5 月 9 日星期四晚上 10:00:00。为什么你会期待不同的时间?
  • 到 UTC 时间和日期:2019 年 5 月 9 日星期四 22:00:00,到本地时间和日期:2019 年 5 月 10 日星期五 00:00:00
  • 但是您没有包含任何时区偏移或位置标识。由于缺乏详细信息,因此假定为 GMT(或 UTC)。您需要为您的位置偏移或将日期字符串转换为 UTC 并将您的数据库设置为匹配。

标签: javascript mysql angularjs


【解决方案1】:

我总能找到以下作品:

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

这有点样板,但可以完成工作。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2019-10-30
    • 2018-08-17
    相关资源
    最近更新 更多