{"id":13393225,"url":"https://github.com/taylorhakes/fecha","last_synced_at":"2025-05-13T19:14:41.517Z","repository":{"id":25564805,"uuid":"28998101","full_name":"taylorhakes/fecha","owner":"taylorhakes","description":"Lightweight and simple JS date formatting and parsing","archived":false,"fork":false,"pushed_at":"2023-01-05T05:12:00.000Z","size":886,"stargazers_count":2072,"open_issues_count":8,"forks_count":125,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-05-05T01:09:42.578Z","etag":null,"topics":["date","javascript","parsing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taylorhakes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-09T03:08:53.000Z","updated_at":"2025-04-28T06:41:54.000Z","dependencies_parsed_at":"2023-01-14T02:58:33.010Z","dependency_job_id":null,"html_url":"https://github.com/taylorhakes/fecha","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorhakes%2Ffecha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorhakes%2Ffecha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorhakes%2Ffecha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorhakes%2Ffecha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taylorhakes","download_url":"https://codeload.github.com/taylorhakes/fecha/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252609653,"owners_count":21775854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["date","javascript","parsing"],"created_at":"2024-07-30T17:00:46.735Z","updated_at":"2025-05-13T19:14:41.497Z","avatar_url":"https://github.com/taylorhakes.png","language":"JavaScript","funding_links":[],"categories":["Tools","JavaScript","Dates","Date","Date [🔝](#readme)","日期","Modules","模块","date"],"sub_categories":["HTTP Client","Runner","运行器","Date \u0026 Time","日期和时间","运行器e2e测试"],"readme":"# fecha [![Build Status](https://travis-ci.org/taylorhakes/fecha.svg?branch=master)](https://travis-ci.org/taylorhakes/fecha)\n\nLightweight date formatting and parsing (~2KB). Meant to replace parsing and formatting functionality of moment.js.\n\n### NPM\n```\nnpm install fecha --save\n```\n### Yarn\n```\nyarn add fecha\n```\n\n### Fecha vs Moment\n\u003ctable class=\"table table-striped table-bordered\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eFecha\u003c/th\u003e\n      \u003cth\u003eMoment\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eSize (Min. and Gzipped)\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e2.1KBs\u003c/td\u003e\n      \u003ctd\u003e13.1KBs\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eDate Parsing\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eDate Formatting\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eDate Manipulation\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eI18n Support\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n      \u003ctd\u003e\u0026#x2713;\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Use it\n\n#### Formatting\n`format` accepts a Date object (or timestamp) and a string format and returns a formatted string. See below for\navailable format tokens.\n\nNote: `format` will throw an error when passed invalid parameters\n```js\nimport { format } from 'fecha';\n\ntype format = (date: Date, format?: string, i18n?: I18nSettings) =\u003e str;\n\n// Custom formats\nformat(new Date(2015, 10, 20), 'dddd MMMM Do, YYYY'); // 'Friday November 20th, 2015'\nformat(new Date(1998, 5, 3, 15, 23, 10, 350), 'YYYY-MM-DD hh:mm:ss.SSS A'); // '1998-06-03 03:23:10.350 PM'\n\n// Named masks\nformat(new Date(2015, 10, 20), 'isoDate'); // '2015-11-20'\nformat(new Date(2015, 10, 20), 'mediumDate'); // 'Nov 20, 2015'\nformat(new Date(2015, 10, 20, 3, 2, 1), 'isoDateTime'); // '2015-11-20T03:02:01-05:00'\nformat(new Date(2015, 2, 10, 5, 30, 20), 'shortTime'); // '05:30'\n\n// Literals\nformat(new Date(2001, 2, 5, 6, 7, 2, 5), '[on] MM-DD-YYYY [at] HH:mm'); // 'on 03-05-2001 at 06:07'\n```\n\n#### Parsing\n`parse` accepts a Date string and a string format and returns a Date object. See below for available format tokens. \n\n*NOTE*: `parse` will throw an error when passed invalid string format or missing format. You MUST specify a format.\n```js\nimport { parse } from 'fecha';\n\ntype parse = (dateStr: string, format: string, i18n?: I18nSettingsOptional) =\u003e Date|null;\n\n// Custom formats\nparse('February 3rd, 2014', 'MMMM Do, YYYY'); // new Date(2014, 1, 3)\nparse('10-12-10 14:11:12', 'YY-MM-DD HH:mm:ss'); // new Date(2010, 11, 10, 14, 11, 12)\n\n// Named masks\nparse('5/3/98', 'shortDate'); // new Date(1998, 4, 3)\nparse('November 4, 2005', 'longDate'); // new Date(2005, 10, 4)\nparse('2015-11-20T03:02:01-05:00', 'isoDateTime'); // new Date(2015, 10, 20, 3, 2, 1)\n\n// Override i18n\nparse('4 de octubre de 1983', 'M de MMMM de YYYY', {\n  monthNames: [\n    'enero',\n    'febrero',\n    'marzo',\n    'abril',\n    'mayo',\n    'junio',\n    'julio',\n    'agosto',\n    'septiembre',\n    'octubre',\n    'noviembre',\n    'diciembre'\n  ]\n}); // new Date(1983, 9, 4)\n```\n\n#### i18n Support\n```js\nimport {setGlobalDateI18n} from 'fecha';\n\n/*\nDefault I18n Settings\n{\n  dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'],\n  dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  amPm: ['am', 'pm'],\n  // D is the day of the month, function returns something like...  3rd or 11th\n  DoFn(dayOfMonth) {\n    return dayOfMonth + [ 'th', 'st', 'nd', 'rd' ][ dayOfMonth % 10 \u003e 3 ? 0 : (dayOfMonth - dayOfMonth % 10 !== 10) * dayOfMonth % 10 ];\n  }\n}\n*/\n\nsetGlobalDateI18n({\n  dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'],\n  dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  amPm: ['am', 'pm'],\n  // D is the day of the month, function returns something like...  3rd or 11th\n  DoFn: function (D) {\n    return D + [ 'th', 'st', 'nd', 'rd' ][ D % 10 \u003e 3 ? 0 : (D - D % 10 !== 10) * D % 10 ];\n  }\n});\n\n```\n\n#### Custom Named Masks\n```js\nimport { format, setGlobalDateMasks } from 'fecha';\n/*\nDefault global masks\n{\n  default: 'ddd MMM DD YYYY HH:mm:ss',\n  shortDate: 'M/D/YY',\n  mediumDate: 'MMM D, YYYY',\n  longDate: 'MMMM D, YYYY',\n  fullDate: 'dddd, MMMM D, YYYY',\n  shortTime: 'HH:mm',\n  mediumTime: 'HH:mm:ss',\n  longTime: 'HH:mm:ss.SSS'\n}\n*/\n\n// Create a new mask\nsetGlobalDateMasks({\n  myMask: 'HH:mm:ss YY/MM/DD';\n});\n\n// Use it\nformat(new Date(2014, 5, 6, 14, 10, 45), 'myMask'); // '14:10:45 14/06/06'\n```\n\n### Formatting Tokens\n\u003ctable class=\"table table-striped table-bordered\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eToken\u003c/th\u003e\n      \u003cth\u003eOutput\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eMonth\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eM\u003c/td\u003e\n      \u003ctd\u003e1 2 ... 11 12\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eMM\u003c/td\u003e\n      \u003ctd\u003e01 02 ... 11 12\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eMMM\u003c/td\u003e\n      \u003ctd\u003eJan Feb ... Nov Dec\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eMMMM\u003c/td\u003e\n      \u003ctd\u003eJanuary February ... November December\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eDay of Month\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eD\u003c/td\u003e\n      \u003ctd\u003e1 2 ... 30 31\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eDo\u003c/td\u003e\n      \u003ctd\u003e1st 2nd ... 30th 31st\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eDD\u003c/td\u003e\n      \u003ctd\u003e01 02 ... 30 31\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eDay of Week\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003ed\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 5 6\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eddd\u003c/td\u003e\n      \u003ctd\u003eSun Mon ... Fri Sat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003edddd\u003c/td\u003e\n      \u003ctd\u003eSunday Monday ... Friday Saturday\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eYear\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eYY\u003c/td\u003e\n      \u003ctd\u003e70 71 ... 29 30\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eYYYY\u003c/td\u003e\n      \u003ctd\u003e1970 1971 ... 2029 2030\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eAM/PM\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eA\u003c/td\u003e\n      \u003ctd\u003eAM PM\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003ea\u003c/td\u003e\n      \u003ctd\u003eam pm\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eHour\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eH\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 22 23\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eHH\u003c/td\u003e\n      \u003ctd\u003e00 01 ... 22 23\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eh\u003c/td\u003e\n      \u003ctd\u003e1 2 ... 11 12\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003ehh\u003c/td\u003e\n      \u003ctd\u003e01 02 ... 11 12\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eMinute\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003em\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 58 59\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003emm\u003c/td\u003e\n      \u003ctd\u003e00 01 ... 58 59\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eSecond\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003es\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 58 59\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003ess\u003c/td\u003e\n      \u003ctd\u003e00 01 ... 58 59\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eFractional Second\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eS\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 8 9\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eSS\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 98 99\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003eSSS\u003c/td\u003e\n      \u003ctd\u003e0 1 ... 998 999\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003eTimezone\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eZ\u003c/td\u003e\n      \u003ctd\u003e\n        -07:00 -06:00 ... +06:00 +07:00\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eZZ\u003c/td\u003e\n      \u003ctd\u003e\n        -0700 -0600 ... +0600 +0700\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorhakes%2Ffecha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaylorhakes%2Ffecha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorhakes%2Ffecha/lists"}