From: Tim Wood Date: Tue, 1 Nov 2011 18:24:50 +0000 (-0700) Subject: Checkpoint 3 X-Git-Tag: 1.1.1~18^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e7738b643fa42afb92300106a6774da89927237;p=thirdparty%2Fmoment.git Checkpoint 3 --- diff --git a/sitesrc/docs.jade b/sitesrc/docs.jade index d0301bd95..16c16da4e 100644 --- a/sitesrc/docs.jade +++ b/sitesrc/docs.jade @@ -391,594 +391,534 @@ block content pre moment().seconds(30) === new Date().setSeconds(30);\n | moment().seconds() === new Date().getSeconds(); - -

Minutes

-

-

-moment().minutes(30); // set the minutes to 30
-
-

- -

Hours

-

-

-moment().hours(12); // set the hours to 12
-
-

- -

Day

-

-

-moment().day(5); // set the day to 5
-
-

- -

Month

-

-

-moment().month(5); // set the month to June
-
-

- -

Year

-

-

-moment().year(1984); // set the year to 1984
-
-

- -

Display

-

Once parsing and manipulation are done, you need some way to display the moment. Moment.js offers many ways of doing that.

- -

Formatted Date

-

The most robust display option is moment.fn.format. It takes a string of tokens and replaces them with their corresponding values from the Date object.

-

-

-var date = new Date(2010, 1, 14, 15, 25, 50, 125);
-moment(date).format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
-moment(date).format("ddd, hA");                       // "Sun, 3PM"
-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenOutput
Month
M1 2 ... 11 12
Mo1st 2nd ... 11th 12th
MM01 02 ... 11 12
MMMJan Feb ... Nov Dec
MMMMJanuary February ... November December
Day of Month
D1 2 ... 30 30
Do1st 2nd ... 30th 31st
DD01 02 ... 30 31
Day of Year
DDD1 2 ... 364 365
DDDo1st 2nd ... 364th 365th
DDDD001 002 ... 364 365
Day of Week
d0 1 ... 5 6
do0th 1st ... 5th 6th
dddSun Mon ... Fri Sat
ddddSunday Monday ... Friday Saturday
Week of Year
w1 2 ... 52 53
wo1st 2nd ... 52nd 53rd
ww01 02 ... 52 53
Year
YY70 71 ... 29 30
YYYY1970 1971 ... 2029 2030
AM/PM
AAM PM
aam pm
Hour
H0 1 ... 22 23
HH00 01 ... 22 23
h1 2 ... 11 12
hh01 02 ... 11 12
Minute
m0 1 ... 58 59
mm00 01 ... 58 59
Second
s0 1 ... 58 59
ss00 01 ... 58 59
Timezone
zEST CST ... MST PST
Localized date format
L07/10/1986
LLJuly 10 1986
LLLJuly 10 1986 8:30 PM
LLLLSaturday, July 10 1986 8:30 PM
- -

Time from another moment

-

Another common way of displaying time, sometimes called timeago, is handled by moment.fn.from.

-

-

-var a = moment([2007, 0, 29]);
-var b = moment([2007, 0, 28]);
-a.from(b) // "a day ago"
-
-

-

The first parameter is anything you can pass to moment() or a Moment.js object.

-

-

-var a = moment([2007, 0, 29]);
-var b = moment([2007, 0, 28]);
-a.from(b);                     // "a day ago"
-a.from([2007, 0, 28]);         // "a day ago"
-a.from(new Date(2007, 0, 28)); // "a day ago"
-a.from("1-28-2007");           // "a day ago"
-
-

-

NOTE: Because it only accepts one parameter to pass in the date info, if you need to use String + Format or String + Formats, you should create a Moment.js object first and then call moment.fn.from

-

-

-var a = moment();
-var b = moment("10-10-1900", "MM-DD-YYYY");
-a.from(b);
-
-

-

If you pass true as the second parameter, you can get the value without the suffix. This is useful wherever you need to have a human readable length of time.

-

-

-var start = moment([2007, 0, 5]);
-var end = moment([2007, 0, 10]);
-start.from(end);       // "in 5 days"
-start.from(end, true); // "5 days"
-
-

-

The base strings are customized by moment.lang or by modifying the values directly using moment.relativeTime.

-

The breakdown of which string is displayed when is outlined in the table below.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RangeKeySample Output
0 to 45 secondssseconds ago
45 to 90 secondsma minute ago
90 seconds to 45 minutesmm2 minutes ago ... 45 minutes ago
45 to 90 minuteshan hour ago
90 minutes to 22 hours hh2 hours ago ... 22 hours ago
22 to 36 hoursda day ago
36 hours to 25 daysdd2 days ago ... 25 days ago
25 to 45 daysMa month ago
45 to 345 daysMM2 months ago ... 11 months ago
345 to 547 days (1.5 years)ya year ago
548 days+yy2 years ago ... 20 years ago
- -

Time from now

-

This is just a map to moment.fn.from(new Date())

-

-

-moment([2007, 0, 29]).fromNow(); // 4 years ago
-
-

-

Like moment.fn.from, if you pass true as the second parameter, you can get the value without the suffix.

-

-

-moment([2007, 0, 29]).fromNow();     // 4 years ago
-moment([2007, 0, 29]).fromNow(true); // 4 years
-
-

- -

Difference

+ + a(name="/manipulation/minutes") + h3 + span Minutes + pre moment().minutes(30); // set the minutes to 30 + + + a(name="/manipulation/hours") + h3 + span Hours + pre moment().hours(12); // set the hours to 12 + + + a(name="/manipulation/day") + h3 + span Day + pre moment().day(5); // set the day to 5 + + + a(name="/manipulation/month") + h3 + span Month + pre moment().month(5); // set the month to June + + + a(name="/manipulation/year") + h3 + span Year + pre moment().year(1984); // set the year to 1984 + + + a(name="/display") + h2 + span Display + p Once parsing and manipulation are done, you need some way to display the moment. Moment.js offers many ways of doing that. + + + a(name="/display/format") + h3 + span Formatted Date + p The most robust display option is + code moment.fn.format + | . It takes a string of tokens and replaces them with their corresponding values from the Date object. + pre var date = new Date(2010, 1, 14, 15, 25, 50, 125);\n + | moment(date).format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"\n + | moment(date).format("ddd, hA"); // "Sun, 3PM" + table + tbody + tr + th Token + th Output + tr + td + b Month + td + tr + td M + td 1 2 ... 11 12 + tr + td Mo + td 1st 2nd ... 11th 12th + tr + td MM + td 01 02 ... 11 12 + tr + td MMM + td Jan Feb ... Nov Dec + tr + td MMMM + td January February ... November December + tr + td + b Day of Month + td + tr + td D + td 1 2 ... 30 30 + tr + td Do + td 1st 2nd ... 30th 31st + tr + td DD + td 01 02 ... 30 31 + tr + td + b Day of Year + td + tr + td DDD + td 1 2 ... 364 365 + tr + td DDDo + td 1st 2nd ... 364th 365th + tr + td DDDD + td 001 002 ... 364 365 + tr + td + b Day of Week + td + tr + td d + td 0 1 ... 5 6 + tr + td do + td 0th 1st ... 5th 6th + tr + td ddd + td Sun Mon ... Fri Sat + tr + td dddd + td Sunday Monday ... Friday Saturday + tr + td + b Week of Year + td + tr + td w + td 1 2 ... 52 53 + tr + td wo + td 1st 2nd ... 52nd 53rd + tr + td ww + td 01 02 ... 52 53 + tr + td + b Year + td + tr + td YY + td 70 71 ... 29 30 + tr + td YYYY + td 1970 1971 ... 2029 2030 + tr + td + b AM/PM + td + tr + td A + td AM PM + tr + td a + td am pm + tr + td Hour + td + tr + td H + td 0 1 ... 22 23 + tr + td HH + td 00 01 ... 22 23 + tr + td h + td 1 2 ... 11 12 + tr + td hh + td 01 02 ... 11 12 + tr + td Minute + td + tr + td m + td 0 1 ... 58 59 + tr + td mm + td 00 01 ... 58 59 + tr + td + b Second + td + tr + td s + td 0 1 ... 58 59 + tr + td ss + td 00 01 ... 58 59 + tr + td Timezone + td + tr + td z + td EST CST ... MST PST + tr + td Localized date format + td + tr + td L + td 07/10/1986 + tr + td LL + td July 10 1986 + tr + td LLL + td July 10 1986 8:30 PM + tr + td LLLL + td Saturday, July 10 1986 8:30 PM + + + a(name="/display/from") + h3 + span Time from another moment + p Another common way of displaying time, sometimes called timeago, is handled by + code moment.fn.from + | . + pre var a = moment([2007, 0, 29]);\n + | var b = moment([2007, 0, 28]);\n + | a.from(b) // "a day ago" + p The first parameter is anything you can pass to + code moment() + | or a Moment.js object. + pre var a = moment([2007, 0, 29]);\n + | var b = moment([2007, 0, 28]);\n + | a.from(b); // "a day ago"\n + | a.from([2007, 0, 28]); // "a day ago"\n + | a.from(new Date(2007, 0, 28)); // "a day ago"\n + | a.from("1-28-2007"); // "a day ago"\n + p NOTE: Because it only accepts one parameter to pass in the date info, + | if you need to use String + Format or String + Formats, you should create a Moment.js + | object first and then call + code moment.fn.from + pre var a = moment();\n + | var b = moment("10-10-1900", "MM-DD-YYYY");\n + | a.from(b); + p If you pass + code true + | as the second parameter, you can get the value without the suffix. This is useful wherever you need to have a human readable length of time. + pre var start = moment([2007, 0, 5]);\n + | var end = moment([2007, 0, 10]);\n + | start.from(end); // "in 5 days"\n + | start.from(end, true); // "5 days" + p The base strings are customized by + code moment.lang + | or by modifying the values directly using + code moment.relativeTime + | . + p The breakdown of which string is displayed when is outlined in the table below. + table + thead + tr + th Range + th Key + th Sample Output + tbody + tr + td 0 to 45 seconds + td s + td seconds ago + tr + td 45 to 90 seconds + td m + td a minute ago + tr + td 90 seconds to 45 minutes + td mm + td 2 minutes ago ... 45 minutes ago + tr + td 45 to 90 minutes + td h + td an hour ago + tr + td 90 minutes to 22 hours + td hh + td 2 hours ago ... 22 hours ago + tr + td 22 to 36 hours + td d + td a day ago + tr + td 36 hours to 25 days + td dd + td 2 days ago ... 25 days ago + tr + td 25 to 45 days + td M + td a month ago + tr + td 45 to 345 days + td MM + td 2 months ago ... 11 months ago + tr + td 345 to 547 days (1.5 years) + td y + td a year ago + tr + td 548 days+ + td yy + td 2 years ago ... 20 years ago + + + a(name="/display/fromNow") + h3 + span Time from now + p This is just a map to + code moment.fn.from(new Date()) + pre moment([2007, 0, 29]).fromNow(); // 4 years ago + p Like + code moment.fn.from + | , if you pass + code true + | as the second parameter, you can get the value without the suffix. + pre moment([2007, 0, 29]).fromNow(); // 4 years ago\n + | moment([2007, 0, 29]).fromNow(true); // 4 years + + + a(name="/display/diff") + h3 + span Difference

To get the difference in milliseconds, use moment.fn.diff like you would use moment.fn.from.

-

-

-var a = moment([2007, 0, 29]);
-var b = moment([2007, 0, 28]);
-a.diff(b) // 86400000
-
-

-

To get the difference in another unit of measurement, pass that measurement as the second argument.

-

-

-var a = moment([2007, 0, 29]);
-var b = moment([2007, 0, 28]);
-a.diff(b, 'days') // 1
-
-

-

The supported measurements are "years", "months", "weeks", "days", "hours", "minutes", and "seconds"

-

By default, moment.fn.diff will return a rounded number. If you want the floating point number, pass true as the third argument.

-

-

-var a = moment([2007, 0]);
-var b = moment([2008, 5]);
-a.diff(b, 'years')       // 1
-a.diff(b, 'years', true) // 1.5
-
-

- -

Native Date

-

To get the native Date object that Moment.js wraps, use moment.fn.native.

-

-

-moment([2007, 0, 29]).native(); // returns native Date object
-
-

- -

Value

-

moment.fn.valueOf simply outputs the unix timestamp.

-

-

-moment(1318874398806).valueOf(); // 1318874398806
-
-

- -

Seconds

-

These are the getters mentioned in the Manipulation section above.

-

These map to the corresponding function on the native Date object.

-

-

-moment().seconds() === new Date().getSeconds();
-
-

- -

Minutes

-

-

-moment().minutes(); // get the minutes
-
-

- -

Hours

-

-

-moment().hours(); // get the hours
-
-

- -

Day

-

-

-moment().day(); // get the day 
-
-

- -

Month

-

-

-moment().month(); // get the month
-
-

- -

Year

-

-

-moment().year(); // get the year
-
-

- -

Leap Year

-

moment.fn.isLeapYear returns true if that year is a leap year, and false if it is not.

-

-

-moment([2000]).isLeapYear() // true
-moment([2001]).isLeapYear() // false
-moment([2100]).isLeapYear() // false
-
-

- -

I18N

-

Moment.js has pretty robust support for internationalization. You can load multiple languages onto the same instance and easily switch between them.

- -

Changing languages

-

By default, Moment.js comes with English language strings. If you need other languages, you can load them into Moment.js for later use.

-

To load a language, pass the key and the string values to moment.lang.

-

Note: More details on each of the parts of the language bundle can be found in the customization section.

-

-

-moment.lang('fr', {
-    months : "Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Décembre".split("_"),
-    monthsShort : "Jan_Fev_Mar_Avr_Mai_Juin_Juil_Aou_Sep_Oct_Nov_Dec".split("_"),
-    weekdays : "Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi".split("_"),
-    weekdaysShort : "Dim_Lun_Mar_Mer_Jeu_Ven_Sam".split("_"),
-    longDateFormat : { 
-        L : "DD/MM/YYYY",
-        LL : "D MMMM YYYY",
-        LLL : "D MMMM YYYY HH:mm",
-        LLLL : "dddd, D MMMM YYYY HH:mm"
-    },
-    relativeTime : {
-        future : "in %s",
-        past : "il y a %s",
-        s : "secondes",
-        m : "une minute",
-        mm : "%d minutes",
-        h : "une heure",
-        hh : "%d heures",
-        d : "un jour",
-        dd : "%d jours",
-        M : "un mois",
-        MM : "%d mois",
-        y : "une année",
-        yy : "%d années"
-    },
-    ordinal : function (number) {
-        return (~~ (number % 100 / 10) === 1) ? 'er' : 'ème';
-    }
-});
-
-

-

Once you load a language, it becomes the active language. To change active languages, simply call moment.lang with the key of a loaded language.

-

-

-moment.lang('fr');
-moment(1316116057189).fromNow() // il y a une heure
-moment.lang('en');
-moment(1316116057189).fromNow() // an hour ago
-
-

- -

Loading languages in NodeJS

+ pre var a = moment([2007, 0, 29]);\n + | var b = moment([2007, 0, 28]);\n + | a.diff(b) // 86400000 + p To get the difference in another unit of measurement, pass that measurement as the second argument. + pre var a = moment([2007, 0, 29]);\n + | var b = moment([2007, 0, 28]);\n + | a.diff(b, 'days') // 1 + p The supported measurements are + code "years", "months", "weeks", "days", "hours", "minutes", and "seconds" + p By default, + code moment.fn.diff + | will return a rounded number. If you want the floating point number, pass + code true + | as the third argument. + pre var a = moment([2007, 0]);\n + | var b = moment([2008, 5]);\n + | a.diff(b, 'years') // 1\n + | a.diff(b, 'years', true) // 1.5 + + + a(name="/display/native") + h3 + span Native Date + p To get the native Date object that Moment.js wraps, use + code moment.fn.native + | . + pre moment([2007, 0, 29]).native(); // returns native Date object + + + a(name="/display/valueOf") + h3 + span Value + p + code moment.fn.valueOf + | simply outputs the unix timestamp. + pre moment(1318874398806).valueOf(); // 1318874398806 + + + a(name="/display/seconds") + h3 + span Seconds + p These are the getters mentioned in the + a(href="#/manipulation/seconds") Manipulation + | section above. + p These map to the corresponding function on the native + code Date + | object. + pre moment().seconds() === new Date().getSeconds(); + + + a(name="/display/minutes") + h3 + span Minutes + pre moment().minutes(); // get the minutes + + + a(name="/display/hours") + h3 + span Hours + pre moment().hours(); // get the hours + + + a(name="/display/day") + h3 + span Day + pre moment().day(); // get the day + + + a(name="/display/month") + h3 + span Month + pre moment().month(); // get the month + + + a(name="/display/year") + h3 + span Year + pre moment().year(); // get the year + + + a(name="/display/leapyear") + h3 + span Leap Year + p + code moment.fn.isLeapYear + | returns true if that year is a leap year, and false if it is not. + pre moment([2000]).isLeapYear() // true\n + | moment([2001]).isLeapYear() // false\n + | moment([2100]).isLeapYear() // false + + + a(name="/i18n") + h2 + span I18N + p Moment.js has pretty robust support for internationalization. You can load multiple languages onto the same instance and easily switch between them. + + + a(name="/i18n/lang") + h3 + span Changing languages + p By default, Moment.js comes with English language strings. If you need other languages, you can load them into Moment.js for later use. + p To load a language, pass the key and the string values to + code moment.lang + | . + p Note: More details on each of the parts of the language bundle can be found in the + a(href="#/custom") customization + | section. + pre moment.lang('fr', {\n + | months : "Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Décembre".split("_"),\n + | monthsShort : "Jan_Fev_Mar_Avr_Mai_Juin_Juil_Aou_Sep_Oct_Nov_Dec".split("_"),\n + | weekdays : "Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi".split("_"),\n + | weekdaysShort : "Dim_Lun_Mar_Mer_Jeu_Ven_Sam".split("_"),\n + | longDateFormat : { \n + | L : "DD/MM/YYYY",\n + | LL : "D MMMM YYYY",\n + | LLL : "D MMMM YYYY HH:mm",\n + | LLLL : "dddd, D MMMM YYYY HH:mm"\n + | },\n + | relativeTime : {\n + | future : "in %s",\n + | past : "il y a %s",\n + | s : "secondes",\n + | m : "une minute",\n + | mm : "%d minutes",\n + | h : "une heure",\n + | hh : "%d heures",\n + | d : "un jour",\n + | dd : "%d jours",\n + | M : "un mois",\n + | MM : "%d mois",\n + | y : "une année",\n + | yy : "%d années"\n + | },\n + | ordinal : function (number) {\n + | return (~~ (number % 100 / 10) === 1) ? 'er' : 'ème';\n + | }\n + | }); + p Once you load a language, it becomes the active language. To change active languages, simply call + code moment.lang + | with the key of a loaded language. + pre moment.lang('fr'); + | moment(1316116057189).fromNow() // il y a une heure + | moment.lang('en'); + | moment(1316116057189).fromNow() // an hour ago + +

+ a(name="/i18n/node") + h3 + span Loading languages in NodeJS

Loading languages in NodeJS is super easy. If there is a language file in moment/lang/ named after that key, the first call to moment.lang will load it.

-

-

-var moment = require('moment');
+      pre var moment = require('moment');
 moment.lang('fr');
 moment(1316116057189).fromNow(); // il y a une heure
 

Right now, there is only support for English, French, Italian, and Portuguese. If you want your language supported, create a pull request or send me an email with the required files.

- -

Loading languages in the browser

+ a(name="/i18n/browser") + h3 + span Loading languages in the browser

Loading languages in the browser just requires you to include the language files.

-

-

-<script src="moment.min.js"></script>
+      pre <script src="moment.min.js"></script>
 <script src="lang/fr.js"></script>
 <script src="lang/pt.js"></script>
 

There are minified versions of each of these languages. There is also a minified version of all of the languages bundled together.

-

-

-<script src="moment.min.js"></script>
+      pre <script src="moment.min.js"></script>
 <script src="lang/all.min.js"></script>
 

Ideally, you would bundle all the files you need into one file to minimize http requests.

-

-

-<script src="moment-fr-it.min.js"></script>
+      pre <script src="moment-fr-it.min.js"></script>
 

- -

Adding your language to Moment.js

+ a(name="/i18n/add") + h3 + span Adding your language to Moment.js

To add your language to Moment.js, submit a pull request with both a language file and a test file. You can find examples in moment/lang/fr.js and moment/test/lang/fr.js

To run the tests, do node build.

If there are no errors building, then do node test or open moment/test/index.html.

If all the tests pass, submit that pull request, and thank you for contributing!

- -

Customization

+ a(name="/custom") +

Customization

If you don't need i18n support, you can manually override the customization values. However, any calls to moment.lang will override them. It is probably safer to create a language for your specific customizations than to override these values manually.

- -

Month Names

+ a(name="/custom/months") + h3 + span Month Names

moment.months should be an array of the month names.

-

-

-moment.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+      pre moment.months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
 

- -

Month Abbreviations

+ a(name="/custom/monthsShort") + h3 + span Month Abbreviations

moment.monthsShort should be an array of the month abbreviations.

-

-

-moment.monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+      pre moment.monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
 

- -

Weekday Names

+ a(name="/custom/weekdays") + h3 + span Weekday Names

moment.weekdays should be an array of the weekdays names.

-

-

-moment.weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+      pre moment.weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
 

- -

Weekday Abbreviations

+ a(name="/custom/weekdaysShort") + h3 + span Weekday Abbreviations

moment.weekdaysShort should be an array of the weekdays abbreviations.

-

-

-moment.weekdaysShort = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+      pre moment.weekdaysShort = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
 
- -

Long Date Formats

+ a(name="/custom/longDateFormats") + h3 + span Long Date Formats

moment.longDateFormat should be an object containing a key/value pair for each long date format (L, LL, LLL, LLLL).

-

-

-moment.longDateFormat = { 
+      pre moment.longDateFormat = { 
     L: "MM/DD/YYYY",
     LL: "MMMM D YYYY",
     LLL: "MMMM D YYYY h:mm A",
@@ -986,12 +926,11 @@ moment.longDateFormat = {
 };
 

- -

Relative Time

+ a(name="/custom/relativeTime") + h3 + span Relative Time

moment.relativeTime should be an object of the replacement strings for moment.fn.from.

-

-

-moment.relativeTime = {
+      pre moment.relativeTime = {
     future: "in %s",
     past: "%s ago",
     s: "seconds",
@@ -1009,12 +948,11 @@ moment.relativeTime = {
 

future refers to the prefix/suffix for future dates, and past refers to the prefix/suffix for past dates. For all others, a single character refers to the singular, and an double character refers to the plural.

- -

Ordinal

+ a(name="/custom/ordinal") + h3 + span Ordinal

moment.ordinal should be a function that returns the ordinal for a given number.

-

-

-moment.ordinal = function (number) {
+      pre moment.ordinal = function (number) {
     var b = number % 10;
     return (~~ (number % 100 / 10) === 1) ? 'th' : 
         (b === 1) ? 'st' :