You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.6 KiB
67 lines
1.6 KiB
var common = require('../../common');
|
|
var connection = common.createConnection();
|
|
var assert = require('assert');
|
|
|
|
common.useTestDb(connection);
|
|
|
|
var table = 'timezone_test';
|
|
connection.query([
|
|
'CREATE TEMPORARY TABLE `' + table + '`(',
|
|
'`offset` varchar(10),',
|
|
'`dt` datetime',
|
|
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
|
|
].join('\n'));
|
|
|
|
var tests = [ 0, 1, 5, 12, 26, -1, -5, -20, 'Z', 'local' ];
|
|
|
|
connection.query('DELETE FROM ' + table);
|
|
|
|
testNextDate();
|
|
|
|
function testNextDate() {
|
|
if (tests.length === 0) {
|
|
return connection.end();
|
|
}
|
|
|
|
var test = tests.pop();
|
|
|
|
testDate(test, function () {
|
|
testNextDate();
|
|
});
|
|
}
|
|
|
|
function testDate(offset, cb) {
|
|
var dt = new Date();
|
|
|
|
if (offset == 'Z' || offset == 'local') {
|
|
connection.config.timezone = offset;
|
|
} else {
|
|
connection.config.timezone = (offset < 0 ? "-" : "+") + pad2(Math.abs(offset)) + ":00";
|
|
}
|
|
connection.query('INSERT INTO ' + table + ' SET ?', { offset: offset, dt: dt });
|
|
|
|
if (offset == 'Z') {
|
|
dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000));
|
|
} else if (offset != 'local') {
|
|
dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000) + (offset * 3600000));
|
|
}
|
|
|
|
connection.query({
|
|
sql: 'SELECT * FROM ' + table + ' WHERE offset = \'' + offset + '\'',
|
|
typeCast: function (field, next) {
|
|
if (field.type != 'DATETIME') return next();
|
|
|
|
return new Date(field.string());
|
|
}
|
|
}, function (err, result) {
|
|
if (err) throw err;
|
|
|
|
assert.strictEqual(dt.toString(), result[0].dt.toString());
|
|
|
|
return cb();
|
|
});
|
|
}
|
|
|
|
function pad2(v) {
|
|
return (v < 10 ? "0" : "") + v;
|
|
}
|