Repository: iamkun/dayjs (JavaScript)

Issue:
parse hours and minutes 12:00
require('daysjs')('12:00', 'hh:mm')  => Invalid Date
require('moment')('12:00', 'hh:mm') => "2019-02-07T12:00:00.000"


Hints:

Patch:
diff --git a/src/locale/en-gb.js b/src/locale/en-gb.js
new file mode 100644
--- /dev/null
+++ b/src/locale/en-gb.js
@@ -0,0 +1,43 @@
+import dayjs from 'dayjs'
+
+const locale = {
+  name: 'en-gb',
+  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+  weekStart: 1,
+  relativeTime: {
+    future: 'in %s',
+    past: '%s ago',
+    s: 'a few seconds',
+    m: 'a minute',
+    mm: '%d minutes',
+    h: 'an hour',
+    hh: '%d hours',
+    d: 'a day',
+    dd: '%d days',
+    M: 'a month',
+    MM: '%d months',
+    y: 'a year',
+    yy: '%d years'
+  },
+  formats: {
+    LT: 'HH:mm',
+    LTS: 'HH:mm:ss',
+    L: 'DD/MM/YYYY',
+    LL: 'D MMMM YYYY',
+    LLL: 'D MMMM YYYY HH:mm',
+    LLLL: 'dddd, D MMMM YYYY HH:mm'
+  },
+  ordinal: (n) => {
+    const s = ['th', 'st', 'nd', 'rd']
+    const v = n % 100
+    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`
+  }
+}
+
+dayjs.locale(locale, null, true)
+
+export default locale
diff --git a/src/plugin/customParseFormat/index.js b/src/plugin/customParseFormat/index.js
--- a/src/plugin/customParseFormat/index.js
+++ b/src/plugin/customParseFormat/index.js
@@ -127,8 +127,9 @@ const parseFormattedInput = (input, format) => {
         minutes || 0, seconds || 0, milliseconds || 0
       ) + (zone.offset * 60 * 1000))
     }
+    const now = new Date()
     return new Date(
-      year, month - 1, day,
+      year || now.getFullYear(), month - 1 || now.getMonth(), day || now.getDate(),
       hours || 0, minutes || 0, seconds || 0, milliseconds || 0
     )
   } catch (e) {


Test patch:
diff --git a/test/locale/keys.test.js b/test/locale/keys.test.js
--- a/test/locale/keys.test.js
+++ b/test/locale/keys.test.js
@@ -36,8 +36,9 @@ it('Locale keys', () => {
 
     expect(months).toEqual(expect.any(Array))
     // function pass date return string or number or null
-    expect(ordinal(1)).toEqual(expect.anything())
-    expect(ordinal(3)).toEqual(expect.anything())
+    for (let i = 1; i <= 31; i += 1) {
+      expect(ordinal(i)).toEqual(expect.anything())
+    }
     expect(dayjs().locale(name).$locale().name).toBe(name)
     if (formats) {
       expect(Object.keys(formats).sort()).toEqual(['L', 'LL', 'LLL', 'LLLL', 'LT', 'LTS'].sort())
diff --git a/test/plugin/customParseFormat.test.js b/test/plugin/customParseFormat.test.js
--- a/test/plugin/customParseFormat.test.js
+++ b/test/plugin/customParseFormat.test.js
@@ -66,6 +66,12 @@ it('timezone with no hour', () => {
   expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())
 })
 
+it('parse just hh:mm)', () => {
+  const input = '12:00'
+  const format = 'hh:mm'
+  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())
+})
+
 it('fails with an invalid format', () => {
   const input = '2018-05-02 12:00 PM'
   const format = 'C'