Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Javascript (http://www.velocityreviews.com/forums/f68-javascript.html)
-   -   Javascript and working with dates (http://www.velocityreviews.com/forums/t937109-javascript-and-working-with-dates.html)

rhaazy 09-19-2008 03:12 PM

Javascript and working with dates
 
I need to write some javascript that will return a date string in the
form mm/dd/yyyy.

The date needs to be today's date - 30 days.

Is there a relatively straight forward way to do this?

So far all I can find is a mess of variables for month, day, and year,
and combining some date functions together, etc etc. Seems like a lot
of work for what should be very simple.

SAM 09-19-2008 07:04 PM

Re: Javascript and working with dates
 
rhaazy a écrit :
> I need to write some javascript that will return a date string in the
> form mm/dd/yyyy.
>
> The date needs to be today's date - 30 days.
>
> Is there a relatively straight forward way to do this?


http://www.merlyn.demon.co.uk/js-date1.htm#incr

> So far all I can find is a mess of variables for month, day, and year,
> and combining some date functions together, etc etc. Seems like a lot
> of work for what should be very simple.



and what do you think we have to do when we want the date in french ?
dd/mm/yyyy

var D = new Date();
D.setMonth(D.getMonth()-1)
alert( D.getDate()+'/'+(+D.getMonth()+1)+'/'+D.getFullYear() );

--> 19/8/2008

--
sm

rhaazy 09-19-2008 08:49 PM

Re: Javascript and working with dates
 
On Sep 19, 3:04*pm, SAM <stephanemoriaux.NoAd...@wanadoo.fr.invalid>
wrote:
> rhaazy a écrit :
>
> > I need to write some javascript that will return a date string in the
> > form mm/dd/yyyy.

>
> > The date needs to be today's date - 30 days.

>
> > Is there a relatively straight forward way to do this?

>
> http://www.merlyn.demon.co.uk/js-date1.htm#incr
>
> > So far all I can find is a mess of variables for month, day, and year,
> > and combining some date functions together, etc etc. *Seems like a lot
> > of work for what should be very simple.

>
> and what do you think we have to do when we want the date in french ?
> * dd/mm/yyyy
>
> var D = new Date();
> D.setMonth(D.getMonth()-1)
> alert( D.getDate()+'/'+(+D.getMonth()+1)+'/'+D.getFullYear() );
>
> * --> 19/8/2008
>
> --
> sm


Thats fine if all I want is a date, but to be able to subtract 30 days
from any given date introduces a huge mess of logic that needs to be
coded.
I decided to just find an open source date library that had decent
parsing functions for my purpose.

Thanks for the post.

Joost Diepenmaat 09-19-2008 09:03 PM

Re: Javascript and working with dates
 
rhaazy <rhaazy@gmail.com> writes:

> On Sep 19, 3:04Â*pm, SAM <stephanemoriaux.NoAd...@wanadoo.fr.invalid>
> wrote:
> Thats fine if all I want is a date, but to be able to subtract 30 days
> from any given date introduces a huge mess of logic that needs to be
> coded.


That's because dates - and times - are VERY messy. A library able to
manipulate dates that is complete enough to be /globally/ useful would
be very large. See for example the amount of stuff in the perl DateTime
project:

http://datetime.perl.org/?Modules

> I decided to just find an open source date library that had decent
> parsing functions for my purpose.


If you can find a decent library, that's probably the best way to handle
this problem.


--
Joost Diepenmaat | blog: http://joost.zeekat.nl/ | work: http://zeekat.nl/

Stevo 09-19-2008 09:44 PM

Re: Javascript and working with dates
 
rhaazy wrote:
> On Sep 19, 3:04 pm, SAM <stephanemoriaux.NoAd...@wanadoo.fr.invalid>
> wrote:
>> var D = new Date();
>> D.setMonth(D.getMonth()-1)
>> alert( D.getDate()+'/'+(+D.getMonth()+1)+'/'+D.getFullYear() );
>> --> 19/8/2008

> Thats fine if all I want is a date, but to be able to subtract 30 days
> from any given date introduces a huge mess of logic that needs to be
> coded.


I can't recall any language that makes dealing with dates easy.

Lasse Reichstein Nielsen 09-19-2008 10:30 PM

Re: Javascript and working with dates
 
rhaazy <rhaazy@gmail.com> writes:

> I need to write some javascript that will return a date string in the
> form mm/dd/yyyy.
>
> The date needs to be today's date - 30 days.
>
> Is there a relatively straight forward way to do this?


var date = new Date();
date.setDate(date.getDate()-30);
var day = date.getDate();
var mth = date.getMonth();
var yr = date.getFullYear();
var format = (day < 10 ? "0" : "") + day + "/" +
(mth < 10 ? "0" : "") + mth + "/" +
yr;

> So far all I can find is a mess of variables for month, day, and year,
> and combining some date functions together, etc etc. Seems like a lot
> of work for what should be very simple.


There isn't a date formatter built in. For most cases, it's not worth
it anyway. Just make one function to format your dates as you want
it and use that wherever it's needed.

/L
--
Lasse Reichstein Nielsen
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

SAM 09-19-2008 10:34 PM

Re: Javascript and working with dates
 
rhaazy a écrit :
> On Sep 19, 3:04 pm, SAM <stephanemoriaux.NoAd...@wanadoo.fr.invalid>
> wrote:
>> rhaazy a écrit :
>>
>>> I need to write some javascript that will return a date string in the
>>> form mm/dd/yyyy.
>>> The date needs to be today's date - 30 days.

>>
>> var D = new Date();
>> D.setMonth(D.getMonth()-1)
>> alert( D.getDate()+'/'+(+D.getMonth()+1)+'/'+D.getFullYear() );
>>
>> --> 19/8/2008

>
> Thats fine if all I want is a date,


don't you want date ? ("mm/dd/yyyy" you did say)

> but to be able to subtract 30 days


and *absoloutly* 30 days ?

> from any given date introduces a huge mess of logic that needs to be
> coded.


Example with a trap over February:
==================================
var y = 2005, m = 03, d = 30; // 30/03/2005 (in dd/mm/yyyy)
var D = new Date(y, +m-1, d); // the orginal JS date
D.setDate(D.getDate()-30); // 30 days less
// that is done
alert( d+'/'+m+'/'+y+
' = original date\n'+
D.getDate()+'/'+(+D.getMonth()+1)+'/'+D.getFullYear()+
' = date - 30 days'):


--
sm

SAM 09-19-2008 10:43 PM

Re: Javascript and working with dates
 
Lasse Reichstein Nielsen a écrit :
> rhaazy <rhaazy@gmail.com> writes:
>>
>> The date needs to be today's date - 30 days.
>>
>> Is there a relatively straight forward way to do this?

>
> var date = new Date();
> date.setDate(date.getDate()-30);
> var day = date.getDate();
> var mth = date.getMonth();


months begin by '0' in JS. No ?
so :
var mth = +date.getMonth()+1;

> var yr = date.getFullYear();
> var format = (day < 10 ? "0" : "") + day + "/" +
> (mth < 10 ? "0" : "") + mth + "/" +
> yr;


sasuke 09-20-2008 07:43 AM

Re: Javascript and working with dates
 
On Sep 20, 6:24*am, Conrad Lender <crlen...@yahoo.com> wrote:
> Usage:
> * * var d = new Date(2008, 3, 4);
> * * var dstr1 = d.fmt("%m/%d/%Y");
> * * var dstr2 = d.fmt("%d.%m.%Y");
>
> /* a simple date formatting method */
> Date.prototype.fmt = function (format) {
> * * var buffer = "";
> * * var chr, nxt;
> * * for (var i = 0, len = format.length; i < len; ++i) {
> * * * * chr = format.substr(i, 1);
> * * * * if (chr != "%") {
> * * * * * * buffer += chr;
> * * * * * * continue;
> * * * * }
> * * * * nxt = format.substr(i + 1, 1);
> * * * * if (nxt == "C") { * * * * * // 2-digit century (eg "19" or "20")
> * * * * * * buffer += String(Math.floor( * /* this shouldbe one line */
> * * * * * * * * this.getFullYear() / 100)).padFront("0", 2);
> * * * * } else if (nxt == "d") { * *// day of month (01 to 31)
> * * * * * * buffer += String(this.getDate()).padFront("0", 2);
> * * * * } else if (nxt == "F") { * *// month of year (1 to 12)
> * * * * * * buffer += (this.getMonth() + 1);
> * * * * } else if (nxt == "f") { * *// day of month (1 to31)
> * * * * * * buffer += this.getDate();
> * * * * } else if (nxt == "H") { * *// 24h hours (00 - 23)
> * * * * * * buffer += String(this.getHours()).padFront("0",2);
> * * * * } else if (nxt == "M") { * *// minutes (00 - 59)
> * * * * * * buffer += String(this.getMinutes()).padFront("0", 2);
> * * * * } else if (nxt == "m") { * *// month of year (01 to 12)
> * * * * * * buffer += String(this.getMonth() + 1).padFront("0", 2);
> * * * * } else if (nxt == "n") { * *// newline
> * * * * * * buffer += "\n";
> * * * * } else if (nxt == "R") { * *// 24h time (%H:%M)
> * * * * * * buffer += String(this.getHours()).padFront("0",2)
> * * * * * * * * * * + ":"
> * * * * * * * * * * + String(this.getMinutes()).padFront("0", 2);
> * * * * } else if (nxt == "S") { * *// seconds (00 - 59)
> * * * * * * buffer += String(this.getSeconds()).padFront("0", 2);
> * * * * } else if (nxt == "T") { * *// 24h time (%H:%M:%S)
> * * * * * * buffer += String(this.getHours()).padFront("0",2)
> * * * * * * * * * * + ":"
> * * * * * * * * * * + String(this.getMinutes()).padFront("0", 2)
> * * * * * * * * * * + ":"
> * * * * * * * * * * + String(this.getSeconds()).padFront("0", 2);
> * * * * } else if (nxt == "Y") { * *// 4-digit year
> * * * * * * buffer += this.getFullYear();
> * * * * } else if (nxt == "y") { * *// 2-digit year
> * * * * * * var y = String(this.getFullYear());
> * * * * * * buffer += y.substr(y.length -2, 2);
> * * * * } else if (nxt == "%") { * *// literal "%" character
> * * * * * * buffer += "%";
> * * * * } else {
> * * * * * * buffer += format.substr(i, 2);
> * * * * }
> * * * * ++i; // skip next
> * * }
> * * return buffer;
>
> }
>
> In this form, it also requires an extension to the String prototype object:
>
> /* left-pads the string with {chr} until it is {len} characters long */
> String.prototype.padFront = function (chr, len) {
> * * if (this.length >= len) {
> * * * * return this;
> * * } else {
> * * * * return chr.repeat(len - this.length) + this;
> * * }
>
> }
>
> /* returns the string repeated {n} times */
> String.prototype.repeat = function (n) {
> * * if (n < 1) return "";
> * * return (new Array(n + 1)).join(this);
>
> }


Nice and compact implementation, 5 stars! A improvement here might be
using Array as buffer instead of String since Strings in Javascript
are immutable thereby preventing temporary string object creation.

/sasuke

Thomas 'PointedEars' Lahn 09-20-2008 10:51 AM

Re: Javascript and working with dates
 
sasuke wrote:
> On Sep 20, 6:24 am, Conrad Lender <crlen...@yahoo.com> wrote:
>> Usage:
>> var d = new Date(2008, 3, 4);
>> var dstr1 = d.fmt("%m/%d/%Y");
>> var dstr2 = d.fmt("%d.%m.%Y");
>>
>> /* a simple date formatting method */
>> Date.prototype.fmt = function (format) {
>> [50 lines of code]
>> }
>>
>> In this form, it also requires an extension to the String prototype object:
>>
>> /* left-pads the string with {chr} until it is {len} characters long */
>> String.prototype.padFront = function (chr, len) {
>> if (this.length >= len) {
>> return this;
>> } else {
>> return chr.repeat(len - this.length) + this;
>> }
>>
>> }
>>
>> /* returns the string repeated {n} times */
>> String.prototype.repeat = function (n) {
>> if (n < 1) return "";
>> return (new Array(n + 1)).join(this);
>>
>> }

>
> Nice and compact implementation, 5 stars!


Compact? Maybe String.prototype.padFront() and String.prototype.repeat().

> A improvement here might be using Array as buffer instead of String


Or no user-defined buffer at all.

> since Strings in Javascript are immutable thereby preventing temporary
> string object creation.


Non sequitur.


PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not
the best source of advice on designing systems that use javascript.
-- Richard Cornford, cljs, <f806at$ail$1$8300dec7@news.demon.co.uk>


All times are GMT. The time now is 05:06 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.