Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework toDate and extract parseISO #1023

Merged
merged 7 commits into from Jan 9, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -173,6 +173,8 @@ for the list of changes made since `v2.0.0-alpha.1`.

- Build-efficient `lightFormat` that only supports the popular subset of tokens. See [#1050](https://github.com/date-fns/date-fns/pull/1015).

- `parseISO` function that parses ISO 8601 strings. See [#1023](https://github.com/date-fns/date-fns/pull/1023).

### Changed
kossnocorp marked this conversation as resolved.
Show resolved Hide resolved

- **BREAKING**: new format string API for `format` function
Expand Down
4 changes: 2 additions & 2 deletions docs/Interval.js
Expand Up @@ -6,8 +6,8 @@
* An object that combines two dates to represent the time interval.
*
* @typedef {Object} Interval
* @property {Date|String|Number} start - the start of the interval
* @property {Date|String|Number} end - the end of the interval
* @property {Date|Number} start - the start of the interval
* @property {Date|Number} end - the end of the interval
* @throws {RangeError} The start of an interval cannot be after its end
* @throws {RangeError} Date in interval cannot be `Invalid Date`
*/
Expand Down
3 changes: 3 additions & 0 deletions docs/strings.md
@@ -0,0 +1,3 @@
# String Arguments

TODO
kossnocorp marked this conversation as resolved.
Show resolved Hide resolved
4 changes: 2 additions & 2 deletions examples/babel/example.js
@@ -1,4 +1,4 @@
import {format} from 'date-fns'
import { format } from 'date-fns'

const result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
2 changes: 1 addition & 1 deletion examples/browserify/example.js
@@ -1,4 +1,4 @@
var format = require('date-fns/format')

var result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
var result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
6 changes: 5 additions & 1 deletion examples/browserify/misc.js
Expand Up @@ -2,5 +2,9 @@ var dateFns = require('date-fns')
var format = dateFns.format
var eo = require('date-fns/locale/eo')

var result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {locale: eo})
var result = format(
new Date(2017, 0, 25, 21, 28, 15),
'eeee, dd MMMM HH:mm:ss',
{ locale: eo }
)
console.log(result === 'merkredo, 25 januaro 21:28:15')
8 changes: 4 additions & 4 deletions examples/flow/example.js.flow
@@ -1,8 +1,8 @@
// @flow

var format = require('date-fns/format')
const format = require('date-fns/format')

var dateString : string = '2017-01-25T21:28:15.000Z'
var formatString : string = 'dd.MM.yyyy HH:mm:ss'
var result : string = format(dateString, formatString)
const dateString : Date = new Date(2017, 0, 25, 21, 28, 15)
const formatString : string = 'dd.MM.yyyy HH:mm:ss'
const result : string = format(dateString, formatString)
console.log(result === '25.01.2017 21:28:15')
16 changes: 8 additions & 8 deletions examples/flow/fp.js.flow
@@ -1,19 +1,19 @@
var addYears = require('date-fns/fp/addYears')
var dateFns = require('date-fns/fp')
var formatWithOptions = dateFns.formatWithOptions
var eo = require('date-fns/locale/eo')
const addYears = require('date-fns/fp/addYears')
const dateFns = require('date-fns/fp')
const formatWithOptions = dateFns.formatWithOptions
const eo = require('date-fns/locale/eo')

const addFiveYears = addYears(5)
const dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')

const dates : Date[] = [
const dates: Date[] = [
new Date(2017, 0 /* Jan */, 1),
new Date(2017, 1 /* Feb */, 11),
new Date(2017, 6 /* Jul */, 2)
]

const formattedDates : string = dates
.map((date) => dateToString(addFiveYears(date)))
const formattedDates: string = dates
.map(date => dateToString(addFiveYears(date)))
.join(', ')

console.log(formattedDates === '1 januaro 2022, 11 februaro 2022, 2 julio 2022')
10 changes: 5 additions & 5 deletions examples/flow/misc.js.flow
@@ -1,9 +1,9 @@
// @flow

var format = require('date-fns').format
var eo = require('date-fns/locale/eo')
const format = require('date-fns').format
const eo = require('date-fns/locale/eo')

var dateString : string = '2017-01-25T21:28:15.000Z'
var formatString : string = 'dd.MM.yyyy HH:mm:ss'
var result : string = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {locale: eo})
const dateString : Date = new Date(2017, 0, 25, 21, 28, 15)
const formatString : string = 'dd.MM.yyyy HH:mm:ss'
const result : string = format(new Date(2017, 0, 25, 21, 28, 15), 'eeee, dd MMMM HH:mm:ss', {locale: eo})
console.log(result === 'merkredo, 25 januaro 21:28:15')
20 changes: 17 additions & 3 deletions examples/lodash-fp/example.js
@@ -1,16 +1,30 @@
import addYears from 'date-fns/fp/addYears'
import formatWithOptions from 'date-fns/fp/formatWithOptions'
import parseISO from 'date-fns/fp/parseISO'
import eo from 'date-fns/locale/eo'

import compose from 'lodash/fp/compose'
import toUpper from 'lodash/fp/toUpper'
import isEqual from 'lodash/isEqual'

const addFiveYears = addYears(5)
const dateToString = formatWithOptions({locale: eo}, 'd MMMM yyyy')
const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy')

const dates = ['2017-01-01', '2017-02-11', '2017-07-02']

const formattedDates = dates.map(compose(toUpper, dateToString, addFiveYears))
const formattedDates = dates.map(
compose(
toUpper,
dateToString,
addFiveYears,
parseISO
)
)

console.log(isEqual(formattedDates, ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022']))
console.log(
isEqual(formattedDates, [
'1 JANUARO 2022',
'11 FEBRUARO 2022',
'2 JULIO 2022'
])
)
2 changes: 1 addition & 1 deletion examples/rollup/example.js
@@ -1,4 +1,4 @@
import format from 'date-fns/esm/format'

const result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
10 changes: 7 additions & 3 deletions examples/rollup/misc.js
@@ -1,5 +1,9 @@
import {format} from 'date-fns/esm'
import {eo} from 'date-fns/esm/locale'
import { format } from 'date-fns/esm'
import { eo } from 'date-fns/esm/locale'

const result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {locale: eo})
const result = format(
new Date(2017, 0, 25, 21, 28, 15),
'eeee, dd MMMM HH:mm:ss',
{ locale: eo }
)
console.log(result === 'merkredo, 25 januaro 21:28:15')
2 changes: 1 addition & 1 deletion examples/typescript/example.ts
@@ -1,7 +1,7 @@
import { format } from 'date-fns'
import { eo } from 'date-fns/locale'

const result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'eeee, dd MMMM HH:mm:ss', {
locale: eo
})
console.log(result === 'merkredo, 25 januaro 21:28:15')
2 changes: 1 addition & 1 deletion examples/typescript/misc.ts
@@ -1,4 +1,4 @@
import { format } from 'date-fns'

const result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
2 changes: 1 addition & 1 deletion examples/webpack-1.x/example.js
@@ -1,4 +1,4 @@
var format = require('date-fns/format')

var result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
var result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
6 changes: 5 additions & 1 deletion examples/webpack-1.x/misc.js
Expand Up @@ -2,5 +2,9 @@ var dateFns = require('date-fns')
var format = dateFns.format
var eo = require('date-fns/locale/eo')

var result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {locale: eo})
var result = format(
new Date(2017, 0, 25, 21, 28, 15),
'eeee, dd MMMM HH:mm:ss',
{ locale: eo }
)
console.log(result === 'merkredo, 25 januaro 21:28:15')
4 changes: 2 additions & 2 deletions examples/webpack-2.x/example.js
@@ -1,4 +1,4 @@
import {format} from 'date-fns/esm'
import { format } from 'date-fns/esm'

const result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
6 changes: 5 additions & 1 deletion examples/webpack-2.x/misc.js
@@ -1,5 +1,9 @@
import format from 'date-fns/esm/format'
import eo from 'date-fns/esm/locale/eo'

const result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {locale: eo})
const result = format(
new Date(2017, 0, 25, 21, 28, 15),
'eeee, dd MMMM HH:mm:ss',
{ locale: eo }
)
console.log(result === 'merkredo, 25 januaro 21:28:15')
2 changes: 1 addition & 1 deletion examples/webpack-4.x/example.js
@@ -1,4 +1,4 @@
import { format } from 'date-fns'

const result = format('2017-01-25T21:28:15.000Z', 'dd.MM.yyyy HH:mm:ss')
const result = format(new Date(2017, 0, 25, 21, 28, 15), 'dd.MM.yyyy HH:mm:ss')
console.log(result === '25.01.2017 21:28:15')
10 changes: 7 additions & 3 deletions examples/webpack-4.x/misc.js
@@ -1,7 +1,11 @@
import { format } from 'date-fns'
import { eo } from 'date-fns/locale'

const result = format('2017-01-25T21:28:15.000Z', 'eeee, dd MMMM HH:mm:ss', {
locale: eo
})
const result = format(
new Date(2017, 0, 25, 21, 28, 15),
'eeee, dd MMMM HH:mm:ss',
{
locale: eo
}
)
console.log(result === 'merkredo, 25 januaro 21:28:15')
4 changes: 2 additions & 2 deletions scripts/test/dst.sh
Expand Up @@ -8,5 +8,5 @@ set -ex

export PATH="$(yarn bin):$PATH"

env TZ=America/Sao_Paulo babel-node ./test/dst/toDate/basic.js
env TZ=Pacific/Apia babel-node ./test/dst/toDate/samoa.js
env TZ=America/Sao_Paulo babel-node ./test/dst/parseISO/basic.js
env TZ=Pacific/Apia babel-node ./test/dst/parseISO/samoa.js
28 changes: 14 additions & 14 deletions src/_lib/format/formatters/index.js
Expand Up @@ -118,8 +118,8 @@ var formatters = {
},

// ISO week-numbering year
R: function(date, token, _localize, options) {
var isoWeekYear = getUTCISOWeekYear(date, options)
R: function(date, token) {
var isoWeekYear = getUTCISOWeekYear(date)

// Padding
return addLeadingZeros(isoWeekYear, token.length)
Expand Down Expand Up @@ -236,7 +236,7 @@ var formatters = {
},

// Stand-alone month
L: function(date, token, localize, options) {
L: function(date, token, localize) {
var month = date.getUTCMonth()
switch (token) {
// 1, 2, ..., 12
Expand Down Expand Up @@ -276,8 +276,8 @@ var formatters = {
},

// ISO week of year
I: function(date, token, localize, options) {
var isoWeek = getUTCISOWeek(date, options)
I: function(date, token, localize) {
var isoWeek = getUTCISOWeek(date)

if (token === 'Io') {
return localize.ordinalNumber(isoWeek, { unit: 'week' })
Expand All @@ -296,8 +296,8 @@ var formatters = {
},

// Day of year
D: function(date, token, localize, options) {
var dayOfYear = getUTCDayOfYear(date, options)
D: function(date, token, localize) {
var dayOfYear = getUTCDayOfYear(date)

if (token === 'Do') {
return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })
Expand All @@ -307,7 +307,7 @@ var formatters = {
},

// Day of week
E: function(date, token, localize, options) {
E: function(date, token, localize) {
var dayOfWeek = date.getUTCDay()
switch (token) {
// Tue
Expand Down Expand Up @@ -414,7 +414,7 @@ var formatters = {
},

// ISO day of week
i: function(date, token, localize, options) {
i: function(date, token, localize) {
var dayOfWeek = date.getUTCDay()
var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek
switch (token) {
Expand Down Expand Up @@ -611,7 +611,7 @@ var formatters = {
},

// Fraction of second
S: function(date, token, localize, options) {
S: function(date, token) {
var numberOfDigits = token.length
var milliseconds = date.getUTCMilliseconds()
var fractionalSeconds = Math.floor(
Expand Down Expand Up @@ -679,7 +679,7 @@ var formatters = {
},

// Timezone (GMT)
O: function(date, token, localize, options) {
O: function(date, token, _localize, options) {
var originalDate = options._originalDate || date
var timezoneOffset = originalDate.getTimezoneOffset()

Expand All @@ -697,7 +697,7 @@ var formatters = {
},

// Timezone (specific non-location)
z: function(date, token, localize, options) {
z: function(date, token, _localize, options) {
var originalDate = options._originalDate || date
var timezoneOffset = originalDate.getTimezoneOffset()

Expand All @@ -715,14 +715,14 @@ var formatters = {
},

// Seconds timestamp
t: function(date, token, localize, options) {
t: function(date, token, _localize, options) {
var originalDate = options._originalDate || date
var timestamp = Math.floor(originalDate.getTime() / 1000)
return addLeadingZeros(timestamp, token.length)
},

// Milliseconds timestamp
T: function(date, token, localize, options) {
T: function(date, token, _localize, options) {
var originalDate = options._originalDate || date
var timestamp = originalDate.getTime()
return addLeadingZeros(timestamp, token.length)
Expand Down
12 changes: 6 additions & 6 deletions src/_lib/format/longFormatters/index.js
@@ -1,4 +1,4 @@
function dateLongFormatter(pattern, formatLong, options) {
function dateLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'P':
return formatLong.date({ width: 'short' })
Expand All @@ -12,7 +12,7 @@ function dateLongFormatter(pattern, formatLong, options) {
}
}

function timeLongFormatter(pattern, formatLong, options) {
function timeLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'p':
return formatLong.time({ width: 'short' })
Expand All @@ -26,13 +26,13 @@ function timeLongFormatter(pattern, formatLong, options) {
}
}

function dateTimeLongFormatter(pattern, formatLong, options) {
function dateTimeLongFormatter(pattern, formatLong) {
var matchResult = pattern.match(/(P+)(p+)?/)
var datePattern = matchResult[1]
var timePattern = matchResult[2]

if (!timePattern) {
return dateLongFormatter(pattern, formatLong, options)
return dateLongFormatter(pattern, formatLong)
}

var dateTimeFormat
Expand All @@ -54,8 +54,8 @@ function dateTimeLongFormatter(pattern, formatLong, options) {
}

return dateTimeFormat
.replace('{{date}}', dateLongFormatter(datePattern, formatLong, options))
.replace('{{time}}', timeLongFormatter(timePattern, formatLong, options))
.replace('{{date}}', dateLongFormatter(datePattern, formatLong))
.replace('{{time}}', timeLongFormatter(timePattern, formatLong))
}

var longFormatters = {
Expand Down