Сгенерируйте метку времени на стороне сервера с помощью Timezone для типа данных Postgresql tswtz - PullRequest
0 голосов
/ 15 мая 2018

В настоящее время я занимаюсь созданием временной метки с часовым поясом в соответствии с определением типа данных TSWTZ PostGreSQL9.6 в javascript в моем проекте PEAN (Postgres, Express, Angular & Node).

Определение в соответствии с документом: TIMESTAMP WITH TIME ZONE '2004-10-19 10: 23: 54 + 02'

Я создал этот фрагмент кода здесь, и он работает, но я уверен, что он может быть улучшен без потери читаемости с помощью регулярного сопоставления / сопоставления с образцом или других подходов.

/* double digits for Date */
Date.prototype.yyyymmdd = function() {
    var mm = (this.getMonth() + 1).toString(); // getMonth() based on 0
    var dd = this.getDate().toString();
    return [this.getFullYear(), mm.length===2 ? '' : '0', mm, dd.length===2 ? '' : '0', dd].join(''); // padding
};

/* double digits for time */
function checkTime(i) {
    return (i < 10) ? "0" + i : i;
}

function getTSWTZ() {
    /* get padded date */
    var today = new Date();
    var todayString = today.yyyymmdd();
    var yyyy = todayString.slice(0,4);
    var mm = todayString.slice(4,6);
    var dd = todayString.slice(6,8);
    var paddedDateString = yyyy + '-' + mm + '-' + dd + ' ';
    /* get padded time */
    h = checkTime(today.getHours());
    m = checkTime(today.getMinutes());
    s = checkTime(today.getSeconds());
    paddedTimeString = h + ":" + m + ":" + s;
    /* get offset of timezone */
    var tzStr = new Date().toString();
    var pos1 = tzStr.indexOf("GMT") +3;
    var pos2 = pos1 + 3;
    var offSetTimeZone = tzStr.slice(pos1, pos2);
    var tswtz = paddedDateString + paddedTimeString + offSetTimeZone;
    return tswtz;
};

Что вы думаете об этом?

1 Ответ

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

PostgreSQL принимает несколько форматов ввода для timestamp with time zone, а формат вывода зависит от параметра DateStyle.

Так что ваш код не только удивительно сложен, но и сомнительно корректен.

Почему бы вам не использовать функцию Javascript Date.now(), разделить результат на 1000 и передать его в функцию PostgreSQL to_timestamp(double precision)?

Это всегда даст вам правильное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...