src/cm/media/js/lib/flexible-js-formatting/dates/date-parsing-demo.html
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
<html xmlns="http://www.w3.org/1999/xhtml">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
<head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
    <title>Javascript Date Parsing Demo</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
    <script type="text/javascript" src="date-functions.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
    <link rel="stylesheet" type="text/css" href="../files/demo-style.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
<body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
<h1>Javascript Date Parsing Demo</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
<p>This page demonstrates the Javascript date-parsing functionality I've
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
created.  First, some samples.  The following code:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
<pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
var d = Date.parseDate("2005-10-05 12:13 am", "Y-m-d g:i a");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
document.write(d + "\n");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
var d = Date.parseDate("9/5/05", "n/j/y");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
document.write(d + "\n");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
</pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
<p>generates this output:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
<pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
var d = Date.parseDate("2005-10-05 12:13 am", "Y-m-d g:i a");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
document.write(d + "\n");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
d = Date.parseDate("9/5/05", "n/j/y");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
document.write(d + "\n");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
d = new Date();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
</pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
<p>This and all output on this page is generated on-the-fly by Javascript, so you can view the page source and see the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
code that creates the output you're seeing.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
<p>It is possible to use the date-parsing functionality, together with the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
date-formatting functionality, for round-trip formatting and parsing back again
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
without losing information.  All you need to do is use the same format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
specifier for both operations.  In general, I would suggest using one of the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
ISO 8601 patterns, such as <code>Date.patterns.ISO8601LongPattern</code> to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
ensure no precision is lost along the way.  Obviously you need to use a format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
specifier that doesn't discard information during the formatting step; anything
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
discarded is unrecoverable during the parsing step.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
<p>To demonstrate this functionality, here is a table showing the round-trip
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
for all the predefined format patterns.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
d = new Date(2005, 10, 18, 20, 11, 32);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
document.write("<table class='borders collapsed'>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
document.write("<tr><th>Input<" + "/th><th>Pattern<" + "/th><th>Formatted Result<" + "/th><th>Parsed Result, Re-Formatted<" + "/th><" + "/tr>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
for (var f in Date.patterns) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    document.write("<tr><td>" + d.dateFormat(Date.patterns.ISO8601LongPattern)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        + "<" + "/td><td>" + Date.patterns[f] + "<" + "/td><td>"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        + d.dateFormat(Date.patterns[f]) + "<" + "/td><td>"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        + Date.parseDate(d.dateFormat(Date.patterns[f]), Date.patterns[f]).dateFormat(Date.patterns.ISO8601LongPattern)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        + "<" + "/th><" + "/tr>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
document.write("<" + "/table>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
<p>As you can see, some of the formats discard some information, so it's not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
always possible to reconstitute the original input.  Notice particularly how the date is assumed to be "today" in cases where only the time is preserved
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
in the formatting string.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
<p>Finally, a word about the internals.  As you may have seen me do before,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
I've written code that writes code.  Here is the regular expression generated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
for one of the parsing formats, followed by the automatically generated code
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
that uses the regular expression to implement the parser:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
<p><code><script type="text/javascript">document.write(Date.parseRegexes[6]);</script></code></p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
<pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
<script type="text/javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
document.write(Date.parse6);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
</pre>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
</html>