Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #18678

Re: Why is this returning NaN

Message-ID <6062718.vzGJ4vAIZo@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Organization PointedEars Software (PES)
Date 2013-03-01 12:46 +0100
Subject Re: Why is this returning NaN
Newsgroups comp.lang.javascript
References <kgi46g$ivc$1@dont-email.me> <kgi75q$2lf$1@dont-email.me> <kgp88e$p8o$1@speranza.aioe.org>

Show all headers | View raw


J.R. wrote:

> On 26/02/2013 08:45, Jukka K. Korpela wrote:
>> 2013-02-26 12:54, Tony wrote:
>>> var diff = Math.abs(new Date() - "2013/02/26 10:24:00"); This
>>> should be perfect legal I believe.
>>
>> When you use new Date(), you get an object. And "2013/02/26
>> 10:24:00" is as such just a string. You cannot perform subtractions
>> on objects and strings.
> 
> Yes, you can, because JavaScript (JS) does 

… and any other conforming ECMAScript implementations do … 

> an implicit coercion with objects: first JS tries .toString(), then
> valueOf() methods.

No, this (ToString()) would only happen if the operator was “+”.
 
> Therefore, the OP is legal

The term “legal” is very much misplaced in programming when it does not 
refer to legislation (such as copyright).  A programming language has a 
syntax, a definition of sequences of tokens that a parser accepts.  A 
program is either *syntactically valid* or it is not.  In addition to 
syntax, source code consist of implementations of algorithms.  Source code 
then either makes sense (has meaning/is logical) or it does not (has not/is 
not).

> because new Date() is implicitly coerced before subtracting the string.

No, it is not.

> You can test this in console:
> 
> new Date() - "250" // is legal and works.
                           ^^^^^
(There is that word again.)

But the result is _not_ NaN as it would be with

  (new Date()).toString() - "250"

Instead, it is an integer Number, for example

  -250

for

  new Date(0) - "250"

Because both the Date instance and the primitive String value "250" are 
type-converted to Number by the “-” operator:

(1) §  11.6.2:

    ToNumber(new Date(0)) - ToNumber("250")

(2) §§ 9.3 and 9.3.1:

    ToNumber(ToPrimitive(new Date(0), Number)) - 250

(3) § 9.1:

    ToNumber([[DefaultValue]](new Date(0), Number) - 250

(4) § 8.12.8:

    ToNumber(new Date(0).valueOf()) - 250

(5) § 15.9.6:

    ToNumber(Date.prototype.valueOf.call(new Date(0))) - 250

(6) § 15.9.5.8:

    ToNumber((new Date(0))[[time value]]) - 250

(7) § 15.9.5.8:

    ToNumber(0) - 250

(8) § 9.1:

    0 - 250

(9) § 11.6.2:

    -250
 
> The OP'c code fails because converting new Date() to a string might
> produce give a different format than the string being used. […]

Nonsense.

>> Instead, use e.g.
>>
>> var now = new Date(); var other = new Date("2013/02/26 10:24:00");
>> var diff = Math.abs(now.getTime() - other.getTime());
>>
>> Better, use a suitable library to parse the date stamp or construct
>> the Date object using suitable numeric parameters. There is no
>> guarantee that all implementations will parse a notation like
>> 2013/02/26 10:24:00 (the same way).
> 
> ACK.

A Sith^WWannabe cries for their Master^W^Wlibraries when they get stuck.
A Jedi^W^WThe knowledgable uses the power of the Force^Wlanguages instead:

  var s = "2013/02/26 10:24:00";
  var m = s.match(/^\s*(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)\s*$/);
  var d;

  if (m)
  {
    /* 
     * But see also Function.prototype.construct() in JSX:object.js
     *
     * --m[2];
     * d = Date.construct(m.slice(1));
     */
    d = new Date(m[1], m[2] - 1, m[3], m[4], m[5], m[6]);
  }

-- 
PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Why is this returning NaN "Tony" <tony.johansson@inport.com> - 2013-02-26 11:54 +0100
  Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-02-26 12:09 +0100
  Re: Why is this returning NaN "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2013-02-26 13:45 +0200
    Re: Why is this returning NaN "J.R." <groups_jr-1@yahoo.com.br> - 2013-03-01 00:45 -0300
      Re: Why is this returning NaN "J.R." <groups_jr-1@yahoo.com.br> - 2013-03-01 01:13 -0300
        Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-01 12:48 +0100
      Re: Why is this returning NaN "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-03-01 10:06 +0100
      Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-01 12:46 +0100
        Re: Why is this returning NaN John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-01 14:19 +0000
        Re: Why is this returning NaN "Joao Rodrigues (J.R.)" <groups_jr-1@yahoo.com.br> - 2013-03-01 12:01 -0300
          Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-01 21:03 +0100
            Re: Why is this returning NaN "Joao Rodrigues (J.R.)" <groups_jr-1@yahoo.com.br> - 2013-03-01 18:25 -0300
              Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-01 22:35 +0100
                Re: Why is this returning NaN Patricia Shanahan <pats@acm.org> - 2013-03-01 20:31 -0800
                Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-02 12:49 +0100
                Re: Why is this returning NaN "J.R." <groups_jr-1@yahoo.com.br> - 2013-03-03 12:32 -0300
                Re: Why is this returning NaN "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-03-03 18:03 +0100
                Re: Why is this returning NaN Martin Leese <please@see.Web.for.e-mail.INVALID> - 2013-03-03 10:16 -0700
                OT: "javascript" was: Why is this returning NaN Christoph Becker <cmbecker69@gmx.de> - 2013-03-03 20:35 +0100
                Re: OT: "javascript" was: Why is this returning NaN "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2013-03-03 21:43 +0200
                Re: OT: "javascript" was: Why is this returning NaN Tim Streater <timstreater@greenbee.net> - 2013-03-03 19:45 +0000
                "javascript" (was: OT: "javascript") Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-03 21:09 +0100
                Re: "javascript" "J.R." <groups_jr-1@yahoo.com.br> - 2013-03-03 23:19 -0300
                Re: "javascript" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-04 11:27 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-04 13:09 +0000
                Re: "javascript" Christoph Becker <cmbecker69@gmx.de> - 2013-03-10 20:50 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-10 20:29 +0000
                Re: "javascript" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-10 23:23 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-10 22:48 +0000
                Re: "javascript" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-10 23:53 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-10 23:23 +0000
                Re: "javascript" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-11 02:57 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-11 08:55 +0000
                Re: "javascript" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-11 17:38 +0100
                Re: "javascript" Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-03-12 19:29 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-13 14:36 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-13 15:20 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-14 11:18 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-14 10:43 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-15 07:02 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-15 10:28 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-16 07:17 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-16 12:04 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-17 08:17 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-17 11:13 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-17 23:15 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-17 16:42 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-18 07:47 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-18 15:01 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-19 07:34 +1100
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-19 15:04 +0000
                Re: "javascript" Andrew Poulos <ap_prog@hotmail.com> - 2013-03-20 07:40 +1100
                Re: "javascript" Mike Duffy <Use.web.form@website_in_sig.com> - 2013-03-13 12:03 +0000
                Re: "javascript" Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-03-14 21:22 +0000
                Re: "javascript" Mike Duffy <Use.web.form@website_in_sig.com> - 2013-03-15 01:44 +0000
                Re: "javascript" Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-03-16 19:42 +0000
                Re: "javascript" Mike Duffy <Use.web.form@website_in_sig.com> - 2013-03-17 18:25 +0000
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-17 19:01 +0000
                Re: "javascript" Gene Wirchenko <genew@telus.net> - 2013-03-15 10:55 -0700
                Re: "javascript" John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-13 15:21 +0000
                Re: "javascript" (was: OT: "javascript") Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-03-04 13:07 +0000
                Re: "javascript" Christoph Becker <cmbecker69@gmx.de> - 2013-03-10 20:34 +0100
                Re: "javascript" Tim Streater <timstreater@greenbee.net> - 2013-03-10 19:39 +0000
                Re: OT: "javascript" was: Why is this returning NaN "J.R." <groups_jr-1@yahoo.com.br> - 2013-03-03 22:41 -0300
                Re: OT: "javascript" was: Why is this returning NaN "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-03-04 09:57 +0100
                Re: OT: "javascript" was: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-03-04 11:25 +0100
                Re: OT: "javascript" was: Why is this returning NaN John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-04 14:52 +0000
                Re: OT: "javascript" was: Why is this returning NaN Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2013-03-10 01:02 +0100
                Re: OT: "javascript" was: Why is this returning NaN John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-10 10:52 +0000
                Re: OT: "javascript" was: Why is this returning NaN Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2013-03-10 12:44 +0100
                Re: OT: "javascript" was: Why is this returning NaN John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-10 17:49 +0000
                Re: OT: "javascript" was: Why is this returning NaN Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2013-03-20 01:21 +0100
                Re: OT: "javascript" was: Why is this returning NaN John G Harris <niam@jghnorth.org.uk.invalid> - 2013-03-20 15:25 +0000
                Re: OT: "javascript" was: Why is this returning NaN Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2013-03-30 01:28 +0100
  Re: Why is this returning NaN Tim Streater <timstreater@greenbee.net> - 2013-02-26 12:00 +0000
    Re: Why is this returning NaN Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-02-26 18:07 +0100
  Re: Why is this returning NaN Gregor Kofler <usenet@gregorkofler.com> - 2013-02-26 13:42 +0100
  Re: Why is this returning NaN Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-02-27 20:43 +0000
    Re: Why is this returning NaN "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-02-28 09:19 +0100

csiph-web