1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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;
- }
|