Skip to content

Commit

Permalink
Merge pull request #1325 from iamkun/dev
Browse files Browse the repository at this point in the history
D2M
  • Loading branch information
2 parents adfd828 + 860c790 commit e6828e4
Show file tree
Hide file tree
Showing 16 changed files with 125 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ script:
- codecov
after_success:
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
npx travis-deploy-once --pro && npm run build && npm run babel && npm install -g @semantic-release/changelog @semantic-release/git semantic-release && semantic-release && npm run test:sauce;
npx travis-deploy-once --pro && npm run build && npm run babel && npm install -g @semantic-release/changelog @semantic-release/git semantic-release && semantic-release && curl ${TriggerUrl} && npm run test:sauce;
fi
branches:
except:
Expand Down
27 changes: 15 additions & 12 deletions docs/en/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,18 +123,21 @@ dayjs().format('Q Do k kk X x')

List of added formats:

| Format | Output | Description |
| ------ | --------------------- | ----------------------------------------------------- |
| `Q` | 1-4 | Quarter |
| `Do` | 1st 2nd ... 31st | Day of Month with ordinal |
| `k` | 1-24 | The hour, beginning at 1 |
| `kk` | 01-24 | The hour, 2-digits, beginning at 1 |
| `X` | 1360013296 | Unix Timestamp in second |
| `x` | 1360013296123 | Unix Timestamp in millisecond |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| Format | Output | Description |
| ------ | --------------------- | --------------------------------------------------------------- |
| `Q` | 1-4 | Quarter |
| `Do` | 1st 2nd ... 31st | Day of Month with ordinal |
| `k` | 1-24 | The hour, beginning at 1 |
| `kk` | 01-24 | The hour, 2-digits, beginning at 1 |
| `X` | 1360013296 | Unix Timestamp in second |
| `x` | 1360013296123 | Unix Timestamp in millisecond |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `W` | 1 2 ... 52 53 | ISO Week of year (depend: weekOfYear & isoWeek plugin) |
| `WW` | 01 02 ... 52 53 | ISO Week of year, 2-digits (depend: weekOfYear & isoWeek plugin)|
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `GGGG` | 2017 | ISO Week Year (depend: weekYear & isoWeek plugin) |

### LocalizedFormat

Expand Down
11 changes: 7 additions & 4 deletions docs/es-es/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,13 @@ Lista de formatos añadidos:
| `kk` | 01-24 | Hora, con 2 dígitos, contando desde 1 |
| `X` | 1360013296 | Tiempo Unix en segundos |
| `x` | 1360013296123 | Tiempo Unix en milisegundos |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `W` | 1 2 ... 52 53 | ISO Week of year (depend: weekOfYear & isoWeek plugin) |
| `WW` | 01 02 ... 52 53 | ISO Week of year, 2-digits (depend: weekOfYear & isoWeek plugin)|
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `GGGG` | 2017 | ISO Week Year (depend: weekYear & isoWeek plugin) |

### LocalizedFormat

Expand Down
11 changes: 7 additions & 4 deletions docs/ja/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,13 @@ dayjs().format('Q Do k kk X x')
| `kk` | 01-24 | 1 始まりで 2 桁の時間 |
| `X` | 1360013296 | Unix タイムスタンプ (秒) |
| `x` | 1360013296123 | Unix タイムスタンプ (ミリ秒) |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `W` | 1 2 ... 52 53 | ISO Week of year (depend: weekOfYear & isoWeek plugin) |
| `WW` | 01 02 ... 52 53 | ISO Week of year, 2-digits (depend: weekOfYear & isoWeek plugin)|
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `GGGG` | 2017 | ISO Week Year (depend: weekYear & isoWeek plugin) |

### LocalizedFormat

Expand Down
11 changes: 7 additions & 4 deletions docs/ko/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,13 @@ dayjs().format('Q Do k kk X x')
| `kk` | 01-24 | 시간, 2자리 표현, 1부터 시작 |
| `X` | 1360013296 | 유닉스 타임스템프, 초 |
| `x` | 1360013296123 | 유닉스 타임스탬프, 밀리 초 |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `W` | 1 2 ... 52 53 | ISO Week of year (depend: weekOfYear & isoWeek plugin) |
| `WW` | 01 02 ... 52 53 | ISO Week of year, 2-digits (depend: weekOfYear & isoWeek plugin)|
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `GGGG` | 2017 | ISO Week Year (depend: weekYear & isoWeek plugin) |

### LocalizedFormat

Expand Down
11 changes: 7 additions & 4 deletions docs/pt-br/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,13 @@ Lista de formatos adicionados:
| `kk` | 01-24 | Hora, com 2 dígitos (começando do 1) |
| `X` | 1360013296 | Unix Timestamp em segundos |
| `x` | 1360013296123 | Unix Timestamp em milissegundos |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `w` | 1 2 ... 52 53 | Week of year (depend: weekOfYear plugin) |
| `ww` | 01 02 ... 52 53 | Week of year, 2-digits (depend: weekOfYear plugin) |
| `W` | 1 2 ... 52 53 | ISO Week of year (depend: weekOfYear & isoWeek plugin) |
| `WW` | 01 02 ... 52 53 | ISO Week of year, 2-digits (depend: weekOfYear & isoWeek plugin)|
| `wo` | 1st 2nd ... 52nd 53rd | Week of year with ordinal (depend: weekOfYear plugin) |
| `gggg` | 2017 | Week Year (depend: weekYear plugin) |
| `GGGG` | 2017 | ISO Week Year (depend: weekYear & isoWeek plugin) |

### LocalizedFormat

Expand Down
3 changes: 3 additions & 0 deletions docs/zh-cn/Plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,11 @@ dayjs().format('Q Do k kk X x')
| `x` | 1360013296123 | 毫秒单位的 Unix 时间戳 |
| `w` | 1 2 ... 52 53 | 年中第几周 (依赖: weekOfYear 插件) |
| `ww` | 01 02 ... 52 53 | 年中第几周,二位数 (依赖: weekOfYear 插件) |
| `W` | 1 2 ... 52 53 | ISO 年中第几周 (依赖: weekOfYear & isoWeek 插件) |
| `WW` | 01 02 ... 52 53 | ISO 年中第几周,二位数 (依赖: weekOfYear & isoWeek 插件) |
| `wo` | 1st 2nd ... 52nd 53rd | 带序号的年中第几周 (依赖: weekOfYear 插件) |
| `gggg` | 2017 | 根据周计算的年份 (依赖: weekYear 插件) |
| `GGGG` | 2017 | ISO 根据周计算的年份 (依赖: weekYear & isoWeek& isoWeek 插件) |

### LocalizedFormat

Expand Down
1 change: 1 addition & 0 deletions src/locale/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const locale = {
monthsShort: 'Jan_Feb_März_Apr_Mai_Juni_Juli_Aug_Sept_Okt_Nov_Dez'.split('_'),
ordinal: n => `${n}.`,
weekStart: 1,
yearStart: 4,
formats: {
LTS: 'HH:mm:ss',
LT: 'HH:mm',
Expand Down
7 changes: 6 additions & 1 deletion src/plugin/advancedFormat/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,24 @@ export default (o, c, d) => { // locale needed later
const locale = this.$locale()
const utils = this.$utils()
const str = formatStr || FORMAT_DEFAULT
const result = str.replace(/\[([^\]]+)]|Q|wo|ww|w|zzz|z|gggg|Do|X|x|k{1,2}|S/g, (match) => {
const result = str.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (match) => {
switch (match) {
case 'Q':
return Math.ceil((this.$M + 1) / 3)
case 'Do':
return locale.ordinal(this.$D)
case 'gggg':
return this.weekYear()
case 'GGGG':
return this.isoWeekYear()
case 'wo':
return locale.ordinal(this.week(), 'W') // W for week
case 'w':
case 'ww':
return utils.s(this.week(), match === 'w' ? 1 : 2, '0')
case 'W':
case 'WW':
return utils.s(this.isoWeek(), match === 'W' ? 1 : 2, '0')
case 'k':
case 'kk':
return utils.s(String(this.$H === 0 ? 24 : this.$H), match === 'k' ? 1 : 2, '0')
Expand Down
9 changes: 5 additions & 4 deletions src/plugin/customParseFormat/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const matchSigned = /[+-]?\d+/ // -inf - inf
const matchOffset = /[+-]\d\d:?(\d\d)?/ // +00:00 -00:00 +0000 or -0000 +00
const matchWord = /\d*[^\s\d-:/()]+/ // Word

let locale
let locale = {}

function offsetFromString(string) {
if (!string) return 0
Expand Down Expand Up @@ -216,8 +216,9 @@ export default (o, C, d) => {
const isStrict = isStrictWithoutLocale || isStrictWithLocale
let pl = args[2]
if (isStrictWithLocale) [,, pl] = args
if (!isStrictWithoutLocale) {
locale = pl ? d.Ls[pl] : this.$locale()
locale = this.$locale()
if (!isStrictWithoutLocale && pl) {
locale = d.Ls[pl]
}
this.$d = parseFormattedInput(date, format, utc)
this.init()
Expand All @@ -226,7 +227,7 @@ export default (o, C, d) => {
this.$d = new Date('')
}
// reset global locale to make parallel unit test
locale = undefined
locale = {}
} else if (format instanceof Array) {
const len = format.length
for (let i = 1; i <= len; i += 1) {
Expand Down
9 changes: 9 additions & 0 deletions src/plugin/devHelper/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ export default (o, c, d) => {
}
return oldParse.bind(this)(cfg)
}
const oldLocale = d.locale
d.locale = function (preset, object, isLocal) {
if (typeof object === 'undefined' && typeof preset === 'string') {
if (!d.Ls[preset]) {
console.warn(`Guessing you may want to use locale ${preset}, you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs`)
}
}
return oldLocale(preset, object, isLocal)
}
}
}

3 changes: 3 additions & 0 deletions src/plugin/weekYear/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ export default (o, c) => {
if (weekOfYear === 1 && month === 11) {
return year + 1
}
if (month === 0 && weekOfYear >= 52) {
return year - 1
}
return year
}
}
25 changes: 25 additions & 0 deletions test/plugin/advancedFormat.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import MockDate from 'mockdate'
import moment from 'moment'
import dayjs from '../../src'
import advancedFormat from '../../src/plugin/advancedFormat'
import isoWeek from '../../src/plugin/isoWeek'
import weekOfYear from '../../src/plugin/weekOfYear'
import weekYear from '../../src/plugin/weekYear'
import timezone from '../../src/plugin/timezone'
Expand All @@ -10,6 +11,7 @@ import '../../src/locale/zh-cn'

dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(isoWeek)
dayjs.extend(weekYear)
dayjs.extend(weekOfYear)
dayjs.extend(advancedFormat)
Expand Down Expand Up @@ -82,11 +84,29 @@ it('Format Week of Year wo', () => {
.toBe(moment(d).locale('zh-cn').format('wo'))
})

it('Format Week of Year wo', () => {
const d = '2018-12-01'
expect(dayjs(d).format('wo')).toBe(moment(d).format('wo'))
expect(dayjs(d).locale('zh-cn').format('wo'))
.toBe(moment(d).locale('zh-cn').format('wo'))
})

it('Format Week Year gggg', () => {
const d = '2018-12-31'
expect(dayjs(d).format('gggg')).toBe(moment(d).format('gggg'))
})

it('Format Iso Week Year GGGG', () => {
const d = '2021-01-01'
expect(dayjs(d).format('GGGG')).toBe(moment(d).format('GGGG'))
})

it('Format Iso Week of Year', () => {
const d = '2021-01-01'
expect(dayjs(d).format('W')).toBe(moment(d).format('W'))
expect(dayjs(d).format('WW')).toBe(moment(d).format('WW'))
})

it('Format offsetName z zzz', () => {
const dtz = dayjs.tz('2012-03-11 01:59:59', 'America/New_York')
expect(dtz.format('z')).toBe('EST')
Expand All @@ -99,6 +119,11 @@ it('Skips format strings inside brackets', () => {
expect(dayjs().format('[Q]')).toBe('Q')
expect(dayjs().format('[Do]')).toBe('Do')
expect(dayjs().format('[gggg]')).toBe('gggg')
expect(dayjs().format('[GGGG]')).toBe('GGGG')
expect(dayjs().format('[w]')).toBe('w')
expect(dayjs().format('[ww]')).toBe('ww')
expect(dayjs().format('[W]')).toBe('W')
expect(dayjs().format('[WW]')).toBe('WW')
expect(dayjs().format('[wo]')).toBe('wo')
expect(dayjs().format('[k]')).toBe('k')
expect(dayjs().format('[kk]')).toBe('kk')
Expand Down
2 changes: 2 additions & 0 deletions test/plugin/customParseFormat.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,8 @@ describe('Strict mode', () => {
const format = 'YYYY-MM-DD'
expect(dayjs(input, format).isValid()).toBe(true)
expect(dayjs(input, format, true).isValid()).toBe(false)
expect(dayjs('2020-Jan-01', 'YYYY-MMM-DD', true).isValid()).toBe(true)
expect(dayjs('30/1/2020 10:59 PM', 'D/M/YYYY h:mm A', true).isValid()).toBe(true)
})
it('with locale', () => {
const input = '2018 三月 99'
Expand Down
6 changes: 6 additions & 0 deletions test/plugin/devHelper.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,9 @@ it('Warning Enable customParseFormat plugin while passing the second format para
dayjs('2020', 'YYYY')
expect(consoleSpy).toHaveBeenCalledWith('To parse a date-time string like 2020 using the given format, you should enable customParseFormat plugin first. https://day.js.org/docs/en/parse/string-format')
})

it('Warning: Setting locale before loading locale', () => {
const consoleSpy = jest.spyOn(console, 'warn')
dayjs.locale('zh-cn')
expect(consoleSpy).toHaveBeenCalledWith('Guessing you may want to use locale zh-cn, you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs')
})
23 changes: 21 additions & 2 deletions test/plugin/weekYear.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import MockDate from 'mockdate'
import dayjs from '../../src'
import weekYear from '../../src/plugin/weekYear'
import weekOfYear from '../../src/plugin/weekOfYear'
import '../../src/locale/en-gb'

dayjs.extend(weekYear)
dayjs.extend(weekOfYear)
Expand All @@ -24,7 +25,25 @@ it('Week Year', () => {
]
daySet.forEach((d) => {
const [day, result] = d
expect(dayjs(day).weekYear()).toBe(result)
expect(dayjs(day).weekYear()).toBe(moment(day).weekYear())
const dResult = dayjs(day).weekYear()
expect(dResult).toBe(result)
expect(dResult).toBe(moment(day).weekYear())
})
})

it('yearStart: 4', () => {
const daySet = [
['2020-12-31', 2020],
['2021-01-01', 2020],
['2021-01-02', 2020],
['2021-01-03', 2020],
['2021-01-04', 2021],
['2021-01-05', 2021]
]
daySet.forEach((d) => {
const [day, result] = d
const dResult = dayjs(day).locale('en-gb').weekYear()
expect(dResult).toBe(result)
expect(dResult).toBe(moment(day).locale('en-gb').weekYear())
})
})

0 comments on commit e6828e4

Please sign in to comment.