From 044611ada1d87a6e2b7aaf141ba1ced773f897cc Mon Sep 17 00:00:00 2001 From: Tim Wood Date: Tue, 20 Sep 2011 17:35:39 -0700 Subject: [PATCH] checkpoint for updating home page reducing duplication of documentation between home page and markdown page --- index.html | 635 +++---------------------------------------------- site/style.css | 3 + 2 files changed, 41 insertions(+), 597 deletions(-) diff --git a/index.html b/index.html index d781b2052..3633fd601 100644 --- a/index.html +++ b/index.html @@ -14,32 +14,33 @@ underscore.date by timrwood +

Underscore.date is a javascript date library that helps create, manipulate, and format dates + without extending the Date prototype.

-

Underscore.date is a javascript date library that helps create, manipulate, and format dates without extending the Date prototype.

- -

Author: Tim Wood (washwithcare@gmail.com)

-

Version: 0.5.2

-

1.82 kb (min + gzip)

- -

Download

-

You can download this project in either - zip or - tar formats. -

-

You can also clone the project with Git by running: -

$ git clone git://github.com/timrwood/underscore.date
-

+
+

2.02 kb (min + gzip)

+

Version 0.6.0

+

Author: Tim Wood

+
+
+

Download

+

You can download this project in either + zip or + tar formats. +

+

You can also clone the project with Git by running: +

$ git clone git://github.com/timrwood/underscore.date
+

+
+
-

Where to use it

-

Node.js

+

Works in the browser and in Node.js!

-

Install with npm

+

Node.js

npm install underscore.date
-

Usage

-
var _date = require('underscore.date');
 console.log(_date('September 9 1999').fromNow());
@@ -53,600 +54,40 @@ console.log(_date('September 9 1999').fromNow());
_date('September 9 1999').fromNow();
-

_date()

- -

The library works by creating a _date() wrapper object. To create that wrapper, you can pass any of the following data types in.

- -

Number

- -
_date(1300291340510)
- -

An integer value representing the number of milliseconds since 1 January 1970 00:00:00 UTC.

- -

Date

- -
_date(new Date(2010, 1, 14, 15, 25, 50, 125))
- -

Any valid Date object. For more information on Date objects, see the JavaScript Date documentation at MDN

- -

Array

- -
_date([2010, 1, 14, 15, 25, 50, 125])
-

An array mirroring the parameters passed into Date.UTC().

-

[year, month = 0, date = 1, hours = 0, minutes = 0, seconds = 0, milliseconds = 0]

+

Examples

-

Any value past the year is optional, and will default to the lowest possible number.

+

Format a Unix timestamp

-

undefined

+
_date(1300291340510).format("MMMM Do, YYYY") // >>> "March 16th, 2011" 
-
_date()
+

Get timeago for a date string

-

If no value is passed to a 'dateInput' parameter, it will default to the current time using new Date().

+
_date("7-10-1986", "MM-DD-YYYY").fromNow() // >>> "25 years ago" 
-
_date() === _date(new Date())
+

Get the current time and add 3 hours

-

String

+
_date().add({h:3}).fromNow() // >>> "in 3 hours" 
-
_date("Dec 25, 1995")
- -

A string that can be parsed by Date.parse().

- -

String with format

- -
_date("12-25-1995", "MM-DD-YYYY")
- -

A string and a format string. The second string will be used as the format to parse the first string.

- -

The format parts are similar to the formats from _date().format()

- -

Important: Parsing a string with a format is by far the slowest method of creating a date. - If you have the ability to change the input, it is much faster (~15x) to use Unix timestamps.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOutput
M or MMMonth
D or DDDay of month
DDD or DDDDDay of year
YY2 digit year (if greater than 70, will return 1900's, else 2000's)
YYYY4 digit year
a or AAM/PM
H, HH, h, or hh24 hour (for 12 hour time, use in conjunction with a or A)
m or mmMinutes
s or ssSeconds
+

Change the language

-

_date Prototype

- -

underscore.date contains a number of utility functions for manipulating and formatting dates.

- -

_date.add()

- -
_date.add(object)
- -

Adds time per the object passed in.

- -

The object should have key value pairs as shown below.

- -
{
-    ms : 200, // milliseconds
-    s : 10,   // seconds
-    m : 10,   // minutes (note: lowercase)
-    h : 2,    // hours
-    d : 3,    // days
-    M : 2,    // months (note: uppercase)
-    y : 3     // years
-}
- -

All the parameters are optional. Also, there are no upper limits for the values, so you can overload any of the parameters.

- -
{ ms : 1000000 } // a million milliseconds
-{ d : 360 }      // 360 days
+
_date(1300291340510).format("MMMM Do, YYYY") // >>> "March 16th, 2011"
+_date.lang('pt');
+_date(1300291340510).format("MMMM Do, YYYY") // >>> "Março 16o, 2011"
+_date.lang('en');
+_date(1300291340510).format("MMMM Do, YYYY") // >>> "March 16th, 2011"
-

Special considerations for months and years

-

If the day of the month on the original date is greater than the number of days in the final month, the day of the month will change to the last day in the final month.

- -

Example:

- -
_date([2010, 0, 31])              // January 31
-_date([2010, 0, 31]).add({M : 1}) // February 28
- -

_date.subtract()

- -
_date.subtract(object)
- -

Functions the same as _date.add(), only using subtraction instead of addition.

- -

Example:

- -
_date([2010, 1, 28])                 // February 28
-_date([2010, 1, 28]).subtract({M:1}) // January 28
- -

_date.format()

- -
_date.format(string)
- -

Returns a human readable string based on the format string that was passed in.

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

The formats are created by creating a string of replacable characters.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputOutput
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
zz - Eastern Standard Time ... Pacific Standard Time

- NOTE: Internet Explorer uses a different implementation of - Date.toString(), so we are unable to retrieve the full string - of the timezone, and will fall back to 'z'.

- So:
- Firefox, Chrome, Safari, etc. == 'Eastern Standard Time'
- Internet Explorer, etc. == 'EST' - -

_date.from()

- -
_date.from(date, withoutSuffix:boolean, asMilliseconds:boolean)
- -

Returns a string as relative time ('minutes ago', '5 months ago', etc).

- -

You can pass anything that you would pass to _date() as the first parameter, or a _date() object.

- -
_date([2007, 0, 29]).from(_date([2007, 0, 28])) // "a day ago"
- -

You can pass true as the second parameter to return without the prefixes and suffixes.

- -
_date([2007, 0, 29]).from(_date([2007, 0, 28]), true) // "a day"
- -

You can pass true as the third parameter to return as milliseconds. - The number of milliseconds returned will be positive if the date passed - in is later than the first date, and negative if the date passed in is earlier.

- -
_date([2007, 0, 29]).from(_date([2007, 0, 28]), true , true) // -86400000);
-_date([2007, 0, 27]).from(_date([2007, 0, 28]), true , true) // 86400000);
- -

The base strings for this function can be customized with _date.relativeTime.

+

Tests

-

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
- +

underscore.date unit tests

-

_date.fromNow()

- -
_date.fromNow(withoutSuffix:boolean, asMilliseconds:boolean)
- -

Retuns the time from now.

- -

A shortcut for _date.from(_date(), withoutSuffix:boolean, asMilliseconds:boolean).

- -

_date.isLeapYear()

- -

Returns true if the year is a leap year, false if it is not

+

underscore.date performance tests

-

Examples :

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

Localization and Customization

- -

To customize the wording of _date.format() and _date.from(), the strings are exposed through the _date object. You can modify these however you see fit.

- -

Examples :

- -
_date.relativeTime.future = "%s from now";
-_date.relativeTime.past = "%s in the past";
- -

_date.relativeTime

- -
_date.relativeTime = {
-    future: "in %s",
-    past: "%s ago",
-    s: "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"
-};
- -

The strings used in _date.from().

- -

future and past are used as the suffixes/prefixes.

- -

For all these values, a single character refers to the singular, and an double character refers to the plural.

- -

_date.weekdays

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

An array of day names, starting with Sunday.

- -

_date.weekdaysShort

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

An array of abbreviated day names, starting with Sunday.

- -

_date.months

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

An array of the names of the months, starting with January.

- -

_date.monthsShort

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

An array of the abbreviated names of the months, starting with January.

- -

_date.ordinal

- -
_date.ordinal = function (number) {
-var b = number % 10;
-return (~~ (number % 100 / 10) === 1) ? 'th' : 
-    (b === 1) ? 'st' : 
-    (b === 2) ? 'nd' : 
-    (b === 3) ? 'rd' : 'th';
-};
- -

A function that returns a string to be appended to the number passed in. - More information on ordinal numbers

- -

Tests

- -

Underscore.date unit tests

- -

Underscore.date performance tests

- -

Thanks to...

- -

The folks over at date.js.

- -

Everyone who helped with php.js date.

- -

Ryan McGeary for his work on the jQuery timeago plugin.

- -

License

- -

Underscore.date is freely distributable under the terms of the MIT license.

- -

Changelog

- -

0.5.2

- -

Buxfix for issue 8 and issue 9.

- -

0.5.1

- -

Buxfix for issue 5.

- -

0.5.0

- -

Dropped the redundant _date.date() in favor of _date(). - Removed _date.now(), as it is a duplicate of _date() with no parameters. - Removed _date.isLeapYear(yearNuumber). Use _date([yearNumber]).isLeapYear() instead. - Exposed customization options through the _date.relativeTime, _date.weekdays, _date.weekdaysShort, _date.months, _date.monthsShort, and _date.ordinal variables instead of the _date.customize() function.

- -

0.4.1

- -

Added date input formats for input strings.

- -

0.4.0

- -

Added underscore.date to npm. Removed dependancies on underscore.

- -

0.3.2

- -

Added 'z' and 'zz' to _.date().format(). Cleaned up some redundant code to trim off some bytes.

- -

0.3.1

- -

Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object.

- -

0.3.0

- -

Switched to the Underscore methodology of not mucking with the native objects' prototypes. - Made chaining possible.

- -

0.2.1

- -

Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'. - Added Date.prototype functions add, subtract, isdst, and isleapyear.

- -

0.2.0

- -

Changed function names to be more concise. - Changed date format from php date format to custom format.

- -

0.1.0

- -

Initial release

- - +

Full source code and documentation at http://github.com/timrwood/underscore.date

diff --git a/site/style.css b/site/style.css index c8cbac9b1..c81db7e58 100755 --- a/site/style.css +++ b/site/style.css @@ -96,3 +96,6 @@ b, strong { font-weight:bold; } #container { background:url(bg-body.png); margin:0 auto; width:960px; padding:20px 40px; text-align:left; } .footer { text-align:center; padding:50px 0 200px; } +.col-1 { width:460px; margin-right:20px; float:left; } + +.clearfix { display:block; clear:both; visibility:hidden; line-height:0; height:0; } \ No newline at end of file -- 2.47.3