Re: make a time script shorter
JRS: In article <ac322d9e5e3a1cf579182abefa5b0e62@news.teranews.com >,
seen in news:comp.lang.javascript, Treetop <treetop@netfront.net> posted
at Fri, 3 Oct 2003 16:42:30 :-[color=blue]
>I used the following script for a site to stop displaying after a date /
>time, but it seems huge. Any ideas on how to make it shorter? There are
>many events in this list.
>
>
>function events() {
>
>var today = new Date();
>var dayarray=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat")[/color]
[color=blue]
>var dayarray=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][/color]
[color=blue]
>var montharray=new
>Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec
>")
>
>
>document.write('<table>');
>var event = "Spirit of the Dance - 8:00 pm (<a
>href=ticketorderform_spiritofthedance.html>Order Tickets</a>)";
>var date = new Date("October 30, 2003");
> date.setHours (23);
> date.setMinutes (21);
> date.setSeconds (59);[/color]
var date = new Date(2003,9,30,23,21,59)
var date = new Date("2003/10/31") // near enough ?
var date = new Date("2003/10/30 23:21:59")
[color=blue]
>var year=date.getYear()
>if (year < 1000)
>year+=1900[/color]
var year = 1900 + date.getYear()%1900 // < AD 3800
[color=blue]
>var day=date.getDay()
>var month=date.getMonth()
>var daym=date.getDate()
>var cdate=dayarray[day]+", "+montharray[month]+" "+daym+" "+year+" "
>if (today.getTime() <= date.getTime()) {
>document.write('<tr><td valign=top>');
>document.write(cdate);
>document.write('</td><td>- ');
>document.write(event);
>document.write('</td></tr>');
> }[/color]
if (today <= date) with (date)
document.write('<tr><tc valign=top>, dayarray[getDay()], ', ',
montharray[getMonth()], ' ', getDate(), ' ',
1900 + date.getYear()%1900, '<\/td><td>- ', event, '<\/td><\/tr>')[color=blue]
>
>
>document.write('</table>');
>
>}[/color]
After testing, then shorten variable names.
For World-Wide Web use, M D Y is silly; use Y M D. Consider LZ, or
equivalent, to add leading zero to getDate().
There is no point in calculating anything that will not get used; test
the date earlier.
To shorten repetitive work, use a function with parameters. For
example, function WriteTable(Evnt, Till) ; today, dayarray,
montharray can be global. If the Evnt always has a similar URL,
parameterise the variable part of that, too :-
WT("Spirit of the Dance - 8:00 pm",
"spiritofthedance", "2003/10/30 23:21:59")
Then you can, for a slight gain on a long schedule, supply those as
elements of an array :
var Data = [
["Spirit of the Dance - 8:00 pm",
"spiritofthedance", "2003/10/30 23:21:59"],
["Mozart - 15:30", "wam", "2003/12/31 11:45"], ... ... ]
Read the FAQ, thoughtfully.
Note that the event occurs at a specific time and location; you want to
prevent ticket ordering at that absolute time or a fixed offset from
that, independently of the orderer's location. The chronologically
retarded, such as Alaskans, should not be able to take undue advantage;
the advanced Maoris should not be handicapped.
It is still possible, I think, to be using a computer
in the VIP lounge at LHR, and to arrive in or near NYC
at an earlier local time.
NOTE to all, prompted by above :
<URL:http://www.merlyn.demon.co.uk/js-date5.htm#DDTA> is much changed;
it could do with a functionality test on later browsers, a correctness
check, and any suggestions for reasonable code reduction. I think the
page displays all relevant code, except imports.
--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://jibbering.com/faq/> Jim Ley's FAQ for news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> JS maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/JS/&c., FAQ topics, links.