Я проанализировал строковую дату в MongoDB, она была сохранена в UTC, и теперь она отображается за день до этого в моем текущем TZ - PullRequest
0 голосов
/ 23 января 2019

В настоящее время я работаю над решением, созданным в NodeJS и MongoDB, и оно требует от меня интеграции со сторонним решением через API.Я полагаю, что API разрабатывался разными людьми годами и, похоже, не имеет какого-то стандарта.

Проблема с датами в том, что я получаю их либо вСтрока, в которой не указывается TZ (становится проблемой позже) или EPOCH, который MongoBD отказывается преобразовывать через $ toDate (я предполагаю, что полученное мной число вычисляется не так, как MongoDB, делает это).

Например:

{
    "_id" : ObjectId("5c3508a9d2477df82702630d"),
    "date" : 1535684400,
    "string_date" : "2018-08-31",
} 

Теперь я получаю, что мне не хватает трех нулей в поле даты, потому что, если вы попытаетесь «новая Дата (1538449200)», как сейчас,Mongo просто даст вам некоторую дату от 1970 года, а новая дата (1535684400000) выведет правильную дату.

Это небольшое неудобство, очевидно, имеет исправления, я пытался использовать Moment и некоторые другие приемы, чтобы правильно отображать его наинтерфейс и придерживаюсь ключа "string_date", но я чувствую, что это не решение, а временное исправление, так что я до сих пор не нашел долгосрочного решения, которое мне не нужноменя это беспокоит.

Поскольку я автоматизировал извлечение данных, я подумал о том, чтобы поработать с ним, но поскольку я извлекал и использовал функцию массовой обработки Mongo, чтобы минимизировать требования к обработке, я на самом деле не очень люблюитерация тысяч записей просто для добавления 3 нулей.

И что произойдет, если я перевожу string_date из API в Date, если TimeZone потерян, и я застрял с T00: 00: Дата 00.000Z, что означает, что когда я вижу ее с отрицательным часовым поясом, даты отстают на один день позади.

{
    "_id" : ObjectId("5c3508a9d2477df82702630d"),
    "date" : 1535684400,
    "string_date" : ISODate("2018-08-31T00:00:00.000Z")
}

Кто-нибудь испытывал нечто подобное или имеет решение этой незначительной, но глупой проблемы?Я начал считать, что единственное реальное решение этой проблемы - это обработка данных, чтобы убедиться, что они имеют правильное количество нулей, я гуглял и видел, как некоторые люди запускают функции пост-создания на Mongoose (неЯ не знаю, сработает ли это для меня, так как функция массовых операций не из Mongoose), и выполнение запланированного задания, которое время от времени фиксирует часы, не достаточно быстро, так как я постоянно генерирую новые данные поверх одного.которые я массово получаю от API.

ПРИМЕЧАНИЕ: просто добавить три 0 в поле даты недостаточно, так как я вспомнил, что некоторые другие объекты даже не дают мне дату EPOCH, и яЯ застрял с датой только на String.

...