Как преобразовать пользовательский ввод даты и времени в UTC и сохранить в базе данных с удаленным сервером в Javascript - PullRequest
0 голосов
/ 23 мая 2018

У меня есть дата и время от пользователя.И нужно хранить в базе данных.Вывод даты в console.log () на удаленном сервере отличается от локального сервера.

Данные из пользовательского ввода:

ui_date = '2018-05-23';
ui_time = '10:00'; // literally meant for 10 oclock
//.... i manage to concatinate ui_date and ui_time and convert to ISO datetime

Сейчас ... Вывод с локального сервера

console.log(myDate.toISOString());  
// outputs: 2018-05-23T02:00:00.000Z
// This is correct UTC since I'm in philippines and the offset is +8
// Localserver automatically convert it to UTC

Вывод с удаленного сервера

console.log(myDate.toISOString());  
// outputs: 2018-05-23T10:00:00.000Z
// This is wrong because it is in local time not UTC

Кажется, удаленный сервер не может преобразовать это время в UTC.

У кого-нибудь есть идеи по этому поводу?

ОБНОВЛЕНИЕ показ фактического кода: Кстати, я использую node.js в качестве сервера.

Ввод от пользователя:

{
    "date": "2018-05-23",
    "time": "10:00"
}

мой маршрут:

router.post('/test_datetime', function(req, res, next) {
    console.log(req.body.date);
    console.log(req.body.time); 

    var date = req.body.date;

    // get the date, month and year
    var dd = new Date(date).getDate();
    var mm = new Date(date).getMonth();
    var yy = new Date(date).getFullYear();

    // get the hour and min from "10:00" and convert to number
    var hour = parseInt(req.body.time.substr(0, 2));
    var min = parseInt(req.body.time.substr(3, 4));

    // constructed datetime
    var datetime = new Date(yy, mm, dd, hour, min).toISOString();
    console.log(datetime);
});

вывод локального сервера datetime:

2018-05-23T02:00:00.000Z

вывод удаленного сервера datetime:

2018-05-23T10:00:00.000Z

1 Ответ

0 голосов
/ 23 мая 2018

Проблема в том, что вы создаете JavaScript-дату, потому что используемый вами метод не учитывает смещение клиента по отношению к UTC.

Создание новой даты из строки даты, как ваш код делает изначально, будет предполагать, что дата (и время) являются локальными.

Тогда просто установка часов и минут на эту дату будет синхронизировать все.

let date = '2018-05-23';
let time = '10:00';

// parse the date and time using the local timezone info
let d = new Date(date + ' ' + time);

// Generate the UTC ISO string
let isoDateTime = d.toISOString();
console.log(isoDateTime);
...