| var assert = require('assert'); |
| |
| var _ = require('underscore'); |
| |
| var dateFormat = require('../lib/dateformat'); |
| |
| var expects = { |
| 'default': 'Wed Nov 26 2014 13:19:44', |
| 'shortDate': '11/26/14', |
| 'mediumDate': 'Nov 26, 2014', |
| 'longDate': 'November 26, 2014', |
| 'fullDate': 'Wednesday, November 26, 2014', |
| 'shortTime': '1:19 PM', |
| 'mediumTime': '1:19:44 PM', |
| 'longTime': '1:19:44 PM %TZ_PREFIX%%TZ_OFFSET%', |
| 'isoDate': '2014-11-26', |
| 'isoTime': '13:19:44', |
| 'isoDateTime': '2014-11-26T13:19:44%TZ_OFFSET%', |
| 'isoUtcDateTime': '', |
| 'expiresHeaderFormat': 'Wed, 26 Nov 2014 13:19:44 %TZ_PREFIX%%TZ_OFFSET%' |
| }; |
| |
| function pad(num, size) { |
| var s = num + ''; |
| while (s.length < size) { |
| s = '0' + s; |
| } |
| return s; |
| } |
| |
| function parseOffset(date) { |
| var offset = date.getTimezoneOffset(); |
| var hours = Math.floor(-1 * offset / 60); |
| var minutes = (-1 * offset) - (hours * 60); |
| var sign = offset > 0 ? '-' : '+'; |
| return { |
| offset: offset, |
| hours: hours, |
| minutes: minutes, |
| sign: sign, |
| }; |
| } |
| |
| function timezoneOffset(date) { |
| var offset = parseOffset(date); |
| return offset.sign + pad(offset.hours, 2) + pad(offset.minutes, 2); |
| } |
| |
| describe('dateformat([now], [mask])', function() { |
| _.each(dateFormat.masks, function(value, key) { |
| it('should format `' + key + '` mask', function(done) { |
| var now = new Date(2014, 10, 26, 13, 19, 44); |
| var tzOffset = timezoneOffset(now); |
| var expected = expects[key].replace(/%TZ_PREFIX%/, 'GMT') |
| .replace(/%TZ_OFFSET%/g, tzOffset) |
| .replace(/GMT\+0000/g, 'UTC'); |
| if (key === 'isoUtcDateTime') { |
| var offset = parseOffset(now); |
| now.setHours(now.getHours() - offset.hours, |
| now.getMinutes() - offset.minutes); |
| var expected = now.toISOString().replace(/\.000/g, ''); |
| } |
| var actual = dateFormat(now, key); |
| assert.strictEqual(actual, expected); |
| done(); |
| }); |
| }); |
| it('should use `default` mask, when `mask` is empty', function(done) { |
| var now = new Date(2014, 10, 26, 13, 19, 44); |
| var expected = expects['default']; |
| var actual = dateFormat(now); |
| |
| assert.strictEqual(actual, expected); |
| done(); |
| }); |
| }); |