¿Qué hace el signo más en '+ nueva fecha'

Respuestas:

294

ese es el operador + unario, es equivalente a:

function(){ return Number(new Date); }

ver: http://xkr.us/articles/javascript/unary-add/

y en MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus

kentaromiura
fuente
44
Pero, ¿por qué no usarías el getTimemétodo definido en el objeto de fecha?
tkone
30
En casi ninguna circunstancia deberías usar esto. Realmente me quemé por esto. + new Date () además de cualquier tipo de operaciones matemáticas sufrirá una importante penalización de rendimiento. Mira este jsperf, jsperf.com/new-date-timing
Geuis
99
@BradKoch en la brevedad de programación ciertamente no es el ingenio del alma. Como la comunidad de Python lo ha dicho adecuadamente, "explícito siempre es mejor que implícito". ¿Qué sucede si un navegador cambia la conversión de tipo automática que está implícita allí mediante una regresión? ¡Ahora tu código simplemente no funciona! .getTime()siempre se asegurará de que lo haga.
tkone
11
@Geu es otra excelente razón por la que solo porque puedes no significa que debas hacerlo.
tkone
14
Sine ECMAScript 5 existe Date.now(), que es la forma preferida de obtener la fecha y la hora en milisegundos.
cutemachine
6

Una fecha de JavaScript se puede escribir como una cadena:

Jue 10 sep 2015 12:02:54 GMT + 0530 (IST)

o como un número:

1441866774938

Las fechas escritas como números especifican el número de milisegundos desde el 1 de enero de 1970 a las 00:00:00.

En cuanto a su pregunta, parece que al agregar '+' después del operador de asignación '=', convertir la Fecha en un valor de número igual.

lo mismo se puede lograr usando la función Number (), como Number (new Date ());

var date = +new Date(); //same as 'var date =number(new Date());'
Dev
fuente
3

Solo para dar más información:

Si recuerda, cuando desee encontrar la diferencia horaria entre dos fechas, simplemente haga lo siguiente;

var d1 = new Date("2000/01/01 00:00:00"); 
var d2 = new Date("2000/01/01 00:00:01");  //one second later

var t = d2 - d1; //will be 1000 (msec) = 1 sec

typeof t; // "number"

ahora si marca el tipo de d1-0, también es un número:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"

that + también convertirá la Fecha en Número:

typeof (+new Date()) //"number"

Pero tenga en cuenta que 0 + new Date()va a no ser tratado de manera similar! se concatenará como cadena:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
S.Serpooshan
fuente
1

Es un operador de suma unario y también se usa para la conversión explícita de números, por lo que cuando llama +new Date(), intenta obtener el valor numérico de ese objeto usando valueOf()como obtenemos cadenas detoString()

new Date().valueOf() == (+new Date)  // true
Raghavendra
fuente
-3

Hace exactamente lo mismo que:

function () {return 0 + new Date; }

que tiene el mismo resultado que:

function () {return new Date (). getTime (); }
Sergey Ilinsky
fuente
11
No en 0 + nueva fecha. Eso primero convierte la fecha en una cadena y luego antepone un "0" (por ejemplo: "0Tue Oct 21 2008 20:38:05 GMT-0400");
Chris Noe
2
1 * nueva fecha, pero 1 + nueva fecha -> Cadena
Kent Fredric
ya, también lo mismo pasanew Date/1
Ashish