¿Equivalente de Javascript del strtotime () de php?


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?


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.


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');

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();

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

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.


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>


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;

'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.