Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .verb.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,9 @@ var week = require('week');

week();
//=> '50' (December)

week(new Date(2017, 0, 3));
//=> '1'
```

Week numbers are **1-indexed**. Week 1 is the week that contains January 1, and weeks start on Sunday. This is a simple helper (similar to 1-based `M`/`MM` month numbers), not ISO 8601 week numbering.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,13 @@ var week = require('week');

week();
//=> '50' (December)

week(new Date(2017, 0, 3));
//=> '1'
```

Week numbers are **1-indexed**. Week 1 is the week that contains January 1, and weeks start on Sunday. This is a simple helper (similar to 1-based `M`/`MM` month numbers), not ISO 8601 week numbering.

## About

### Related projects
Expand Down
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ module.exports = function week(date) {
var first = new Date(date.getFullYear(), 0, 1);
var diff = ((date - first) / 86400000);
var days = (diff + first.getDay());
return Math.floor(days / 7).toString();
return (Math.floor(days / 7) + 1).toString();
};
35 changes: 32 additions & 3 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,40 @@

require('mocha');
var assert = require('assert');
var moment = require('moment');
var week = require('./');

describe('week()', function () {
it('should return an object with the number and name of the current week', function () {
assert.equal(week(), moment(new Date()).format('WW'));
it('should return the current week as a 1-indexed numeric string', function () {
var current = week();
assert.equal(typeof current, 'string');
assert.ok(/^[1-9]\d*$/.test(current), 'expected a 1-indexed week string, got ' + current);
var n = +current;
assert.ok(n >= 1 && n <= 53);
});

it('should not return week 0 for 3 January 2017 (#3)', function () {
// Reporter: week() emitted "0" on 3 January 2017 (Tue; Jan 1 was Sunday).
assert.equal(week(new Date(2017, 0, 3)), '1');
});

it('should treat January 1 through the first Saturday as week 1', function () {
assert.equal(week(new Date(2017, 0, 1)), '1');
assert.equal(week(new Date(2017, 0, 2)), '1');
assert.equal(week(new Date(2017, 0, 7)), '1');
assert.equal(week(new Date(2017, 0, 8)), '2');
});

it('should stay 1-indexed when January 1 is not Sunday', function () {
// 1 January 2016 was a Friday — previously emitted "0".
assert.equal(week(new Date(2016, 0, 1)), '1');
assert.equal(week(new Date(2016, 0, 2)), '1');
// First Sunday of 2016 starts week 2.
assert.equal(week(new Date(2016, 0, 3)), '2');
});

it('should preserve Sunday-start numbering later in the year', function () {
// 13 March 2017 was reported as week 10 (off-by-one); week 1 started Jan 1.
assert.equal(week(new Date(2017, 2, 13)), '11');
assert.equal(week(new Date(2017, 11, 31)), '53');
});
});