怎么从 javascript 到 mysql 读取和存储日期时间

本教程将介绍如何从 javascript 到 mysql 读取和存储日期时间的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么从 javascript 到 mysql 读取和存储日期时间 教程 第1张

问题描述

我正在构建一个应用程序 node.js,用户在其中创建一个记录,其中包含一个名为游览日期和时间的字段.我正在使用 daterangepicker 插件来显示日期和时间下拉窗口.一旦用户保存记录,它就会作为日期时间字段保存在 MySQL 表中.

然后我使用 fullcalendar 来显示给定月份-年份的所有旅行日期.

但这就是问题所在.假设我选择 28/11/2018 下午 6:30 作为游览日期和时间.在日期范围选择器中,它被保存为

2018-11-28 18:30

$('input#tour_date').daterangepicker({
 singleDatePicker: true,
 showDropdowns: true,
 timePicker: true,
 timePickerIncrement: 30,
 locale: {
  format: 'DD/MM/YYYY hh:mm A'
 }
}, function (chosendate) {
 $('input[name="tour_date"]').val(moment(chosendate).format('YYYY-MM-DD hh:mm'));
 //the value for input becomes 2018-11-28 18:30
});

我没有为 daterangepicker 或 momentjs 设置任何时区.我从表单中获得的日期时间(在保存到数据库之前)是相同的.即它在 2018-11-28 18:30 出现.

但是在保存到数据库时,它会保存为

2018-11-28 01:00:00

它将 +06:30(IST,印度标准时间值)添加到传入的日期时间字段.

因此,当我打开日历时,日期正确(28/11/2018)但时间不正确.用户保存了期望时间为下午 6.30 的字段,但看到的是 01:00

我将日期时间保存为

var tourDate = new Date(req.body.tour_date).toISOString();

我正在使用 Sequelize ORM,但我没有给出任何特定的时区.

const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
 host: process.env.DB_HOST,
 port: 3306,
 dialect: 'mysql',
 pool: {
  max: 10,
  min: 0,
  acquire: 30000,
  idle: 10000
 },
 logging: false
});

我想要做的是无论用户在哪个时区.我想将给定的日期和时间按原样保存在数据库中并按原样检索它,以显示在日历中.

我怎么做到这一点?

推荐答案

如果你是通过sequelize存储日期,那么它会将日期存储为UTC,

所以从前端只需传递 UTC 中的日期,这样它就会被存储如果您使用日期时间选择器,它会自动将 UTC 转换为您的时区,只需将 UTC 数据传递给您的插件.

通过时只需使用 UTC 即可.

好了关于怎么从 javascript 到 mysql 读取和存储日期时间的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。