我目前正在根据我的PEAN项目(Postgres,Express,Angular& Node)中javascript中PostGreSQL9.6的TSWTZ的数据类型定义生成带时区的时间戳。
根据该文件的定义是:TIMESTAMP WITH TIME ZONE' 2004-10-19 10:23:54 + 02'
我在这里创建了这个代码片段并且它正在工作,但我确信它可以通过reg-ex /模式匹配或其他方法在不缺乏可读性的情况下进行改进。
/* 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;
};
您对此有何看法?
答案 0 :(得分:2)
PostgreSQL接受timestamp with time zone
的几种输入格式,输出格式取决于DateStyle
参数。
因此,您的代码不仅令人惊讶地复杂,而且还具有可疑的正确性。
为什么不使用Javascript的Date.now()
函数,将结果除以1000并将其提供给PostgreSQL的to_timestamp(double precision)
函数?
这将始终为您提供正确的价值。