¿Equivalente de Javascript del strtotime () de php?

83

En PHP, puede convertir fácilmente una descripción textual de fecha y hora en inglés en una fecha adecuada con strtotime().

¿Hay algo similar en Javascript?

VJS
fuente
Para analizar desde el formato dd.mm.yyyy, consulte stackoverflow.com/questions/1576753/…
Valentin Despa

Respuestas:

52

Encontré este artículo y probé el tutorial. Básicamente, puede usar el constructor de fecha para analizar una fecha, luego escribir obtener los segundos del getTime()método

var d=new Date("October 13, 1975 11:13:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

¿Esto funciona?

usr-local-ΕΨΗΕΛΩΝ
fuente
Parece que no me funciona la fecha está formateada en formato dmY.
Valentin Despa
30
-1. Esto solo cubre las fechas con formato RFC 822 o ISO 8601, pero strtotime()admite muchos otros formatos.
Ja͢ck
1
Esto puede suceder para satisfacer el caso de uso del OP, pero es una respuesta técnicamente incorrecta e inválida a la pregunta. Vea (y vote a favor) la respuesta de Westy92.
Nate Abele
68

Sí lo es. Y es compatible con todos los navegadores principales:

var ts = Date.parse("date string");

La única diferencia es que esta función devuelve milisegundos en lugar de segundos, por lo que debe dividir el resultado entre 1000.

Compruebe qué formatos válidos puede analizar JavaScript.

Arnaldo
fuente
29
No; esto funciona de manera muy diferente a php strtotime, ninguno de los ejemplos de documentación de php funciona, ni uno solostrtotime("now"); strtotime("10 September 2000"); strtotime("+1 day"); strtotime("+1 week"); strtotime("+1 week 2 days 4 hours 2 seconds"); strtotime("next Thursday"); strtotime("last Monday");
Ivan Castellanos
1
Gracias @Arnaldo. Esto es trabajo para mí. Tu respuesta es más aceptable que la de "Djechelon"
Adi
Esto debería funcionar, pero no es confiable. Date.parse ('2020-06-06') debería devolver la misma marca de tiempo que Date.parse ('6 de junio de 2020'), pero no es así. (1591401600000 vs 1591423200000)
Vincent
35

¡Vea esta implementación de strtotime () de PHP en JavaScript!

Descubrí que funciona de manera idéntica a PHP para todo lo que le lancé.

Actualización: esta función según la versión 1.0.2 no puede manejar este caso: '2007:07:20 20:52:45' (tenga en cuenta el :separador de año y mes)

Actualización 2018:

¡Esto ahora está disponible como npmmódulo ! Simplemente npm install locutusy luego en su fuente:

var strtotime = require('locutus/php/datetime/strtotime');
Westy92
fuente
3
Normalmente no me gustan las respuestas que son solo enlaces a bibliotecas, pero en este caso, dado que JavaScript no maneja casi los casos locos como strtotime, esta es una respuesta fantástica. ¡Gracias!
Fusty
La última versión de Locutus (7 de septiembre de 2018 en este momento) no maneja cadenas como 'ayer 19:00'.
nicolas
4

Estoy celoso del strtotime () en php, pero hago el mío en javascript usando moment. No es tan dulce como el de php, pero también hace el truco perfectamente.

// first day of the month
var firstDayThisMonth = moment(firstDayThisMonth).startOf('month').toDate();

Avanza y retrocede usando subtract()y add()con endOf()y startOf():

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();
KhoPhi
fuente
0

La compatibilidad del navegador para analizar cadenas es inconsistente . Debido a que no existe una especificación sobre qué formatos deben admitirse, lo que funciona en algunos navegadores no funcionará en otros navegadores.

Pruebe Moment.js : proporciona la funcionalidad de varios navegadores para analizar fechas :

var timestamp = moment("2013-02-08 09:30:26.123");
console.log(timestamp.milliseconds()); // return timestamp in milliseconds
console.log(timestamp.second()); // return timestamp in seconds
Bedrin
fuente
Esto no responde completamente a la pregunta (y tiene una puntuación negativa). ¿Hay alguna forma de revocar la recompensa?
Westy92
0

Hay pocos módulos que proporcionan un comportamiento similar, pero no exactamente como strtotime de PHP. Entre las pocas alternativas, encontré que date-util produce los mejores resultados.

doc_id
fuente
0

var strdate = new Date('Tue Feb 07 2017 12:51:48 GMT+0200 (Türkiye Standart Saati)');
var date = moment(strdate).format('DD.MM.YYYY');
$("#result").text(date); //07.02.2017
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

<div id="result"></div>

Isa ilimitada
fuente
Advertencia de obsolescencia: el valor proporcionado no está en un formato ISO reconocido. Construcción momento cae de nuevo a JSDate() - taaan ... mismo que new Date(strdate)realmente ...
deceze
0

Quizás puedas explotar una función de muestra como:

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45 //Adding fourty five minutes
  });
document.body.innerHTML = futureDate;

'

Adnane Ar
fuente