FAQ Topic - How can I create a Date from a String? (2009-10-05)

D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 14:57:03, Garrett Smith
Dr J R Stockton wrote:
I see the FAQ has changed the link to require authentication:
http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func
=doc.Fetch&nodeid=4021199

The page that the request is redirected to does not state how to get a
username and password.

It might be well enough to host ISO8601 on merlyn or jibbering.

Can you spare the bandwidth?

No, usage is rising now that the weather is getting colder. I need some
Australian readers to even things out. And I only host with permission
from the author / copyright-owner.



FAQ, date to string, throw : if throw is used, its string should include
toString() of the offending date, that being likely to help in finding
what the real error is.

The unlinked page <js-faq.htm> is now renamed, linked and published as
<URL:http://www.merlyn.demon.co.uk/js-faq-u.htm>, with a new section on
date to string. That section has only briefly been tested and its words
not reviewed. It should accept any Number internally from getFullYear,
getMonth, getDate, and give a reasonable result.

As shown there, the same routine can, with negligible overhead, be used
either as a plain function or as a method of the Date Object.
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 17:31:24, Garrett Smith
Dr J R Stockton wrote:



The +/- sign should not be present when year is 0-9999.

(a) Which part of "something like" did you fail to see?
(b) That's up to the Sign function. AISB, depending on circumstances,
the sign string may need to be "+", " ", "". It can depend on the
magnitude of Y.
When year is < 0, but > -9999, the sign, plus a leading 0, are
necessary.

No. It could be required by ISO 8601, but compliance with 8061 is not
compulsory.
-9999-12-12 - INVALID.
-09999-12-12 - VALID.

Eh? Do you mean that? 9999?

I see articles. Enabling script for that domain..

After enabling javascript, I see:
Wednesday, October 21, 109

I see your point.

BTW, other pages there are correct. They have been told.

This requires rewriting the entire date section, starting with the main
section, which states:

| The ISO Extended format for common date is YYYY-MM-DD, and for time is
| hh:mm:ss.

I do not have a draft for how to explain your proposed format.

<URL:http://www.merlyn.demon.co.uk/js-faq-u.htm>, but the relevant
section is still being fettled.

NOTE : All date output routines must be checked with new Date(NaN).
Ones with limits will pass, if the limits are appropriately expressed.
Leading Zero routines need checking with NaN, since the result should be
NaN and might be 0NaN.

I see your point in this. Valid, but the tradeoff is introducing more
complexity WRT explaining ISO8601, in a javascript FAQ.

NO. If possible, give a link to ISO 8601:2004 itself; Otherwise/and,
link to the Wiki page AND the one by Markus Kuhn at
<http://www.cl.cam.ac.uk/~mgk25/iso-time.html>.

There is no need for the FAQ to cover exact compliance with ANY norm or
standard for years outside the commonly-used range of <now> +- 100
years. For most applications, 2000 to 2050 is currently ample.
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 17:50:03, Garrett Smith
Correction: should be:
When year is < 0, but >= -9999, the sign, plus enough leading zeros, to
fit a pattern YYYYY should be used.

The sign is apparently not necessary. I had believed that it was
necessary for expanded representation, but apparently that was
incorrect, as I cannot find that in the specification.

Section 3.4.2, largest paragraph. Note also the following [_].
Expanded Representation:
| If, by agreement, expanded representations are used, the formats
shall
| be as specified below. The interchange parties shall agree the
| additional number of digits in the time element year. In the examples
| below it has been agreed to expand the time element year with two
| digits.
| [example]

The example uses the sign for year, but apparently that may be omitted.

IMHO it may not; but that is a fault in the standard. In an application
handling only positive years, there should be no requirement to use a +.
And using 8601 is not compulsory.
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 16:09:13, Garrett Smith
A strategy can be used to feature-test input type="date" and, where not
supported, a js-driven calendar used.

The feature test:

var inputTypeDate = document.createElement("input");
inputTypeDate.setAttribute("type", "date");
var IS_NATIVE = /date/i.test(inputTypeDate.type)
inputTypeDate = null;

A problem with that strategy I see is that Opera's datepicker does not
display year before 1582.

The date/time input types are currently not fit for use. Only one of my
five browsers recognises any of them.

Tester <http://validator.w3.org/> does not accept them in HTML 4.01
Strict. It does, apparently, in HTML 5; but it throws up so many other
errors on a page nearly valid in 4.01 that ISTM few will want to be
5-valid.

Only some of them work for me in Opera 9.64 & 10, and some of those work
badly (and the drop-downs don't move if the page is scrolled!); the
figures are almost unreadable at 1280*1024, and only 3 year digits are
visible at once. The UTC one has UTC in non-black-on-transparent,
making it even harder to see.

P.S. Some of that depends on settings; I set input to
monospace by CSS.

Some are usable in an Opera-only intranet. Otherwise, a js-driven
calendar, or a simpler input, must be provided; and in that case why
bother with the Opera one? Things may be better in a few years time.

Till then, I think we should ignore those types, except for recommending
that others ignore them.
 
G

Garrett Smith

Dr said:
In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 16:09:13, Garrett Smith


The date/time input types are currently not fit for use. Only one of my
five browsers recognises any of them.

Yes, but: "where not supported, a js-driven calendar used."

So, where IS_NATIVE == false, then the script creates a calendar widget
(div and table, with event handlers).
Tester <http://validator.w3.org/> does not accept them in HTML 4.01
Strict. It does, apparently, in HTML 5; but it throws up so many other
errors on a page nearly valid in 4.01 that ISTM few will want to be
5-valid.

Odd. Most of my documents pass without any changes.
Only some of them work for me in Opera 9.64 & 10, and some of those work
badly (and the drop-downs don't move if the page is scrolled!); the
figures are almost unreadable at 1280*1024, and only 3 year digits are
visible at once. The UTC one has UTC in non-black-on-transparent,
making it even harder to see.
It's good that you tested, and I bet Opera would be appreciative; it
would help to file a bug report at:
https://bugs.opera.com/wizard/

And you can also post up the links here.
P.S. Some of that depends on settings; I set input to
monospace by CSS.

Some are usable in an Opera-only intranet. Otherwise, a js-driven
calendar, or a simpler input, must be provided; and in that case why
bother with the Opera one? Things may be better in a few years time.
Probably.

Till then, I think we should ignore those types, except for recommending
that others ignore them.
I have not observed the problems that you have noticed. Can you post an
example? If the problem is significant enough, but could be tested, then
the script could use input type="date", where the tests pass.
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Thu, 22 Oct 2009 19:03:08, Garrett Smith
... ...
I have not observed the problems that you have noticed. Can you post an
example? If the problem is significant enough, but could be tested, then
the script could use input type="date", where the tests pass.

<URL:http://www.merlyn.demon.co.uk/js-date3.htm#HTML>. But perhaps I am
not using it correctly.

There is no point in feature testing and providing alternative code if
the alternative code is as good as, but not necessarily
indistinguishable from, the missing feature. There is little point if
the alternative code is good enough. Instead, just provide the
alternative code (and note what can be done when all browsers have the
feature working better than the alternative.
 
G

Garrett Smith

Dr said:
In comp.lang.javascript message <[email protected]
september.org>, Thu, 22 Oct 2009 19:03:08, Garrett Smith



<URL:http://www.merlyn.demon.co.uk/js-date3.htm#HTML>. But perhaps I am
not using it correctly.

There is no point in feature testing and providing alternative code if
the alternative code is as good as, but not necessarily
indistinguishable from, the missing feature. There is little point if
the alternative code is good enough. Instead, just provide the
alternative code (and note what can be done when all browsers have the
feature working better than the alternative.

Never will "all browsers" support input type="date".

Several years will pass before widespread implementation in the latest
versions of major browsers.

The new native control is an attractive option, even when a difficult
fallback must be coded.

The native control can be more efficient than a script.

It would seem to be more reliable than a script, though it seems that
the opposite may be true in Opera.

One thing Opera gets right is the arrow keys navigate the days properly.

My hand-rolled widget does not handle that, and that should be fixed.
 
G

Garrett Smith

Dr said:
In comp.lang.javascript message <[email protected]
september.org>, Wed, 21 Oct 2009 17:31:24, Garrett Smith



(a) Which part of "something like" did you fail to see?
(b) That's up to the Sign function. AISB, depending on circumstances,
the sign string may need to be "+", " ", "". It can depend on the
magnitude of Y.


No. It could be required by ISO 8601, but compliance with 8061 is not
compulsory.


Eh? Do you mean that? 9999?



BTW, other pages there are correct. They have been told.



<URL:http://www.merlyn.demon.co.uk/js-faq-u.htm>, but the relevant
section is still being fettled.

NOTE : All date output routines must be checked with new Date(NaN).
Ones with limits will pass, if the limits are appropriately expressed.
Leading Zero routines need checking with NaN, since the result should be
NaN and might be 0NaN.

You do realize, of course, that NaN is not a valid ISO8601 format.

Date.parse recognizes no ISO8601 formats, so either way works:
javascript:alert(Date.parse(new Date( ).toISOString()))
javascript:alert(Date.parse( NaN ))
NO. If possible, give a link to ISO 8601:2004 itself; Otherwise/and,
link to the Wiki page AND the one by Markus Kuhn at
<http://www.cl.cam.ac.uk/~mgk25/iso-time.html>.
Doing so does not explain the concept concisely. Nor does: "Y-M-D" as
Merlyn page calls it. 1-2-3 seems to fit that pattern.
There is no need for the FAQ to cover exact compliance with ANY norm or
standard for years outside the commonly-used range of <now> +- 100
years. For most applications, 2000 to 2050 is currently ample.

There is no good reason to impose arbitrary limitations on the year.

YYYY, or 0000-9999, is not arbitrary, is easy, and is suitable for most
needs.

The larger range requires a total rewrite of the FAQ section, and
probably removal of the links to the w3c note on dates, and Marcus
Kuhn's page, which states:

The international standard date notation is

YYYY-MM-DD

The benefit to using that "international standard" is that it is easier
to explain and understand, than YYYY+ type of format.

The benefit to using extended range is that it can utilize the native
toISOString method:-

// Where supported
(new Date).toISOString().split("T")[0];

And where not supported, can use a fallback.

In Tracemonkey, Date.parse cannot recognize values generated from
toISOString.

javascript:alert(Date.parse(new Date(-9e14).toISOString()))
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Sat, 24 Oct 2009 01:12:30, Garrett Smith


PLEASE TRIM YOUR QUOTES


You do realize, of course, that NaN is not a valid ISO8601 format.

You have confused matters by introducing Date Object to String in a
thread about FAQ "How can I create a Date from a String? (2009-10-05)" -
and you seem to have confused yourself.

Since ISO 8601 only handles calendar dates, it naturally has no
representation for representing (for example) the object given by
new Date("2007:11:22"). Therefore the result of such test should not be
a valid ISO 8601 date - or anything like it.

Code presuming the Object to represent a date in 0000-9999 would
probably give 0NaN-0NaN-0NaN or 0NaN-NaN-NaN. Slightly better code
would give NaN-NaN-NaN. "NaN", " NaN", or "Invalid Date" would be
satisfactory. Doing a throw is not a good solution; firstly, an end
user may not realise what is happening, and secondly, continuing may
provide more clues for the tester about what the real problem is.

Date.parse recognizes no ISO8601 formats,
Not guaranteed.
so either way works:
javascript:alert(Date.parse(new Date( ).toISOString()))
javascript:alert(Date.parse( NaN ))

I don't understand what that was written for.
Doing so does not explain the concept concisely. Nor does: "Y-M-D" as
Merlyn page calls it. 1-2-3 seems to fit that pattern.

As you know, I have many pages. You need not give the full URL, but
you should give the file name and maybe an anchor. If you mean as was
the intention was to indicate only a preferred field said:
There is no good reason to impose arbitrary limitations on the year.

YYYY, or 0000-9999, is not arbitrary, is easy, and is suitable for most
needs.

The larger range requires a total rewrite of the FAQ section,

No. It is only necessary to say something like "For years 0000-9999,
that complies with ISO 9601; for 0001-9999, with SQL", after the code
and before the links you mention below.
and
probably removal of the links to the w3c note on dates, and Marcus
Kuhn's page, which states:

The international standard date notation is

YYYY-MM-DD

That is of course wrong. YYYY-MM-DD is only the most common of six
equally standard forms for dates on 0000-9999, and the year range is
infinitely extendible.
The benefit to using that "international standard" is that it is easier
to explain and understand, than YYYY+ type of format.

One should present the most widely useful code, and explain it with
sufficient skill. Little explanation is actually needed, because the
FAQ user can read and test the code.
The benefit to using extended range is that it can utilize the native
toISOString method:-

// Where supported
(new Date).toISOString().split("T")[0];

And where not supported, can use a fallback.

In which case there is no benefit in trying to use toISOString, except
in special cases where the possible gain in speed is perceptible. There
is no need to confuse date-to-string by including feature detection.


- - - - -

Given that the FAQ is published in HTML to users expected to have
JavaScript, and that it is also published in a plain text rendering
approximating to what a browser reading the HTML will show : might it be
practical for the HTML version to have, where useful, a control of some
sort that brings additionally into view the reasoning behind the FAQ
recommendation.

Similar example : <URL:http://www.merlyn.demon.co.uk/estr-xpl.htm> -
click on the brown-background stuff to see the "source code" (or
sometimes /vice versa/) - e.g., a click on "Acknowledges the loss of 10
days in October 1582 and the new Leap Year Rules." reveals " ... tum
propter decem dies ex mense Octobri anni 1582 auferendos, tum etiam
propter tres bissextos omittendos quibusque quadringentis annis,"

<js-faq-u.htm#GDF> green box contains something like such reasoning.
 
G

Garrett Smith

Dr said:
In comp.lang.javascript message <[email protected]
september.org>, Sat, 24 Oct 2009 01:12:30, Garrett Smith



PLEASE TRIM YOUR QUOTES

Better to include too much than trim too much.

I'm including the following remainder, to show how trimming too much
can lead to confusion.
You have confused matters by introducing Date Object to String in a
thread about FAQ "How can I create a Date from a String? (2009-10-05)" -
and you seem to have confused yourself.
You lost me there.

You trimmed far too much context, creating a hard-to-follow reply that
lacks context.
Since ISO 8601 only handles calendar dates, it naturally has no
representation for representing (for example) the object given by
new Date("2007:11:22"). Therefore the result of such test should not be
a valid ISO 8601 date - or anything like it.

Test? What test?
Code presuming the Object to represent a date in 0000-9999 would
probably give 0NaN-0NaN-0NaN or 0NaN-NaN-NaN.

Huh?

Slightly better code
would give NaN-NaN-NaN. "NaN", " NaN", or "Invalid Date" would be
satisfactory. Doing a throw is not a good solution; firstly, an end
user may not realise what is happening, and secondly, continuing may
provide more clues for the tester about what the real problem is.
Start over. Take a nap, get some coffee, whatever you need to do.
Not guaranteed.


I don't understand what that was written for.
The conversation seems to have degraded quite a bit.

My response above, was to show that your "NaN" string is going to be
as valid for Date.parse, in Tracemonkey as the result of -
aDate.toISOString() -.

Date.parse is specified to read the result of toISOString. Instead, it
is unrecognized in Firefox, and the result is the same as with NaN.

| 15.9.4.2 Date.parse (string)
| The parse function applies the ToString operator to its argument
| and interprets the resulting String as a date and time; it
| returns a Number, the UTC time value corresponding to the date
| and time. The String may be interpreted as a local time, a UTC
| time, or a time in some other time zone, depending on the
| contents of the String. The function first attempts to parse the
| format of the String according to the rules called out in Date
| Time String Format (15.9.1.15). If the String does not conform
| to that format the function may fall back to any implementation-
| specific heuristics or implementation-specific date formats.
| Unrecognizable Strings or dates containing illegal element
| values in the format String shall cause Date.parse to return
| NaN.
|
| If x is any Date object whose milliseconds amount is zero within
| a particular implementation of ECMAScript, then all of the
| following expressions should produce the same numeric value in
| that implementation, if all the properties referenced have their
| initial values:
|
| x.valueOf()
| Date.parse(x.toString())
| Date.parse(x.toUTCString())
| Date.parse(x.toISOString())

The answer to the question: "4.2 How can I create a Date from a String"
could, ideally be changed so that it uses Date.parse, where supported.

Then again, Date.parse is guaranteed by ES5 to parse the result from
toISOString, and *not* the most common format, so

Date.parse("2000-12-12")

- could return NaN. Pitiful.
As you know, I have many pages. You need not give the full URL, but
you should give the file name and maybe an anchor. If you mean as was
in <js-faq-u.htm>, the intention was to indicate only a preferred field
order.

Lets do tha for now. Link to Merlyn, provide an example for YYYY-MM-DD.

We can always revisit this for the FAQ, and what is done so far is at
least a meager improvement.
No. It is only necessary to say something like "For years 0000-9999,
that complies with ISO 9601; for 0001-9999, with SQL", after the code
and before the links you mention below.

Have you verfified that statement with the SQL standard, or did you mean
to write "XML Schema" instead of "SQL"?
That is of course wrong. YYYY-MM-DD is only the most common of six
equally standard forms for dates on 0000-9999, and the year range is
infinitely extendible.

Lets revisit that soon on the FAQ. Expanded range has teh benefit of
leveraging native toISOString().split("T")[0].
The benefit to using that "international standard" is that it is easier
to explain and understand, than YYYY+ type of format.

One should present the most widely useful code, and explain it with
sufficient skill. Little explanation is actually needed, because the
FAQ user can read and test the code.
The benefit to using extended range is that it can utilize the native
toISOString method:-

// Where supported
(new Date).toISOString().split("T")[0];

And where not supported, can use a fallback.

In which case there is no benefit in trying to use toISOString, except
in special cases where the possible gain in speed is perceptible. There
is no need to confuse date-to-string by including feature detection.

The design could be a bit different.

if(!Date.prototype.toISOString) { /* hand-rolled */ }

Then, where needed:-

var isoDateString = aDate.toISOString().split("T")[0];

- - - - -

Given that the FAQ is published in HTML to users expected to have
JavaScript, and that it is also published in a plain text rendering
approximating to what a browser reading the HTML will show : might it be
practical for the HTML version to have, where useful, a control of some
sort that brings additionally into view the reasoning behind the FAQ
recommendation.
I'd rather have test questions.

click for answer.
[user thinking...]
click...
[answer pops out]


Sorry, I don't understand that.
<js-faq-u.htm#GDF> green box contains something like such reasoning.
I see.
 
G

Garrett Smith

Dr said:
In comp.lang.javascript message <lghpc5dq02b5vs17m33dn6vlo85vjpq8rt@4ax.
com>, Wed, 7 Oct 2009 18:49:45, Hans-Georg Michna <hans-
(e-mail address removed)> posted:


To most people, I guess it's not obvious what D1 == D2 does; I believe
it compares the objects to see if they are the same object.

To do otherwise would be a specification violation.

One might
think it could compare the toString() results, but that would be
wasteful of effort. Just compare +D1 with +D2.

var d = new Date, d2 = new Date;
d.setTime(1000); d2.setTime(1000);

d == d2; // false;

This should be obvious, as setting:-

d.x = 12;

would not have an effect on d2.

d2.x; // undefined.

+d == +d2; // true;

For fun:
d <= d2; // true
d >= d2; // true.
d == d2; // false
You could have read <URL:http://www.merlyn.demon.co.uk/js=-date0.htm#DC>
instead of asking.

404. Probably meant:
http://www.merlyn.demon.co.uk/js-date0.htm#DC
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
september.org>, Sat, 24 Oct 2009 18:31:02, Garrett Smith
Better to include too much than trim too much.

We can look back if necessary. Clutter hides the message.

I'm including the following remainder, to show how trimming too much
can lead to confusion.




You lost me there.

Then read it again.

You trimmed far too much context, creating a hard-to-follow reply that
lacks context.


Test? What test?

The test with the Date Object containing NaN (I assume that the result
of new Date(NaN) does in fact contain a NaN, instead of just pretending
to).


Code presuming that would not test for that. Methods of the Date Object
that return a Number return the Number NaN if the Object contains NaN.
NaN.toString() padded to 4 characters is 0NaN. Routines that pad to two
characters and using numeric rather than string-length tests can also
pad NaN to 0NaN. The rest should be obvious.
Slightly better code
Start over. Take a nap, get some coffee, whatever you need to do.

Read it again.
The conversation seems to have degraded quite a bit.

My response above, was to show that your "NaN" string is going to be
as valid for Date.parse, in Tracemonkey as the result of -
aDate.toISOString() -.

Not important. A Date Object is generally converted to String in order
that a human may read it, so what date.parse does is immaterial.
Date.parse is specified to read the result of toISOString.

The specification for ECMAscript is, as far as I know, the 3rd edition,
the 5th not having been published.

The specification that matters for sensible Web coders will remain the
3rd for several years.

Therefore, Date.parse is not specified to read the result of
toISOString. Also, it is not specified to read any ISO 8601 form.

Instead, it
is unrecognized in Firefox, and the result is the same as with NaN.

| 15.9.4.2 Date.parse (string)

When quoting standards or specifications, the version needs to be
clearly stated. The following is from a future standard, according to
the newsgroup FAQ.
| The parse function applies the ToString operator to its argument
| and interprets the resulting String as a date and time; it
| returns a Number, the UTC time value corresponding to the date
| and time. The String may be interpreted as a local time, a UTC
| time, or a time in some other time zone, depending on the
| contents of the String. The function first attempts to parse the
| format of the String according to the rules called out in Date
| Time String Format (15.9.1.15). If the String does not conform
| to that format the function may fall back to any implementation-
| specific heuristics or implementation-specific date formats.
| Unrecognizable Strings or dates containing illegal element
| values in the format String shall cause Date.parse to return
| NaN.
|
| If x is any Date object whose milliseconds amount is zero within
| a particular implementation of ECMAScript, then all of the
| following expressions should produce the same numeric value in
| that implementation, if all the properties referenced have their
| initial values:
|
| x.valueOf()
| Date.parse(x.toString())
| Date.parse(x.toUTCString())
| Date.parse(x.toISOString())

The answer to the question: "4.2 How can I create a Date from a String"
could, ideally be changed so that it uses Date.parse, where supported.

You should tart a new thread for that; the recent discussion here has
been on the reverse topic.
Then again, Date.parse is guaranteed by ES5 to parse the result from
toISOString, and *not* the most common format, so

Date.parse("2000-12-12")

- could return NaN. Pitiful.

If the ES5 committee had posted here asking for advice, they could have
produced a much better standard.
Lets do tha for now. Link to Merlyn, provide an example for YYYY-MM-DD.

We can always revisit this for the FAQ, and what is done so far is at
least a meager improvement.


Have you verfified that statement with the SQL standard, or did you mean
to write "XML Schema" instead of "SQL"?

No; I wrote "something like", as you can see. The information comes
from what you wrote, so you can easily but it into a rigorous form.

That is of course wrong. YYYY-MM-DD is only the most common of six
equally standard forms for dates on 0000-9999, and the year range is
infinitely extendible.

Lets revisit that soon on the FAQ. Expanded range has teh benefit of
leveraging native toISOString().split("T")[0].

There is no native toISOString; and in practice it will be years before
it can be assumed to be present.

The benefit to using extended range is that it can utilize the
native
toISOString method:-

// Where supported
(new Date).toISOString().split("T")[0];

And where not supported, can use a fallback.
In which case there is no benefit in trying to use toISOString,
except
in special cases where the possible gain in speed is perceptible. There
is no need to confuse date-to-string by including feature detection.

The design could be a bit different.

if(!Date.prototype.toISOString) { /* hand-rolled */ }

Then, where needed:-

var isoDateString = aDate.toISOString().split("T")[0];

That's still confusing and bloating by attempting code which will rarely
work before using "traditional" code.
I'd rather have test questions.

Entirely different concept. Mine is a tool for those who want to
understand why the FAQ says what it does; it is not an extra for
handling the questions frequently asked.
click for answer.
[user thinking...]
click...
[answer pops out]


Sorry, I don't understand that.

It a URL. Click on it, scroll down, click on brown bits. AISB.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,084
Messages
2,570,596
Members
47,217
Latest member
GuadalupeE

Latest Threads

Top