Javascript еквівалент phto strtotime ()?


83

У PHP ви можете легко перетворити текстовий опис дати та часу англійською мовою у відповідну дату за допомогою strtotime().

Чи є щось подібне в Javascript?


Для синтаксичного аналізу з формату dd.mm.yyyy перевірте stackoverflow.com/questions/1576753/…
— Валентин Деспа

Відповіді:


52

Я знайшов цю статтю і спробував підручник. В основному, ви можете використовувати конструктор дати для синтаксичного аналізу дати, а потім напишіть отримання секунд із getTime()методу

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

Це працює?


Здається, я не працюю, це дата відформатована у форматі dmY.
— Валентин Деспа

30
-1. Це стосується лише відформатованих дат RFC 822 або ISO 8601, але strtotime()підтримує багато інших форматів.
— Jack

1
Це може трапитись, щоб задовольнити випадок використання OP, але це технічно неправильна, неправильна відповідь на запитання. Дивіться (і, будь ласка, підтримайте) відповідь Westy92.
— Nate Abele

68

Так. І це підтримується у всіх основних браузерах:

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

Єдина різниця полягає в тому, що ця функція повертає мілісекунди замість секунд, тому вам потрібно розділити результат на 1000.

Перевірте, які допустимі формати може аналізувати JavaScript.


29
Ні; це працює дуже по-різному, ніж php strtotime, жоден з прикладів роботи з документацією php, жоденstrtotime("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");
— Іван Кастелланос

1
Дякую @Arnaldo. Це працює для мене. Ваша відповідь більш прийнятна, ніж "Джечелонська"
— Аді

Це має спрацювати, але це ненадійно. Date.parse ('2020-06-06') повинен повертати ту саму позначку часу, що й Date.parse ('6 червня 2020'), але це не так. (1591401600000 проти 1591423200000)
— Вінсент

35

Перевірте цю реалізацію PHP strtotime () в JavaScript!

Я виявив, що він працює ідентично PHP для всього, що я на нього кинув.

Оновлення: ця функція згідно з версією 1.0.2 не може обробити цей випадок: '2007:07:20 20:52:45' (Зверніть увагу на :роздільник року та місяця)

Оновлення 2018:

Це тепер доступно як npmмодуль ! Просто, npm install locutusа потім у своєму джерелі:

var strtotime = require('locutus/php/datetime/strtotime');

3
Зазвичай я не люблю відповіді, які є лише посиланнями на бібліотеки, але в цьому випадку, оскільки JavaScript не обробляє майже шалені випадки як strtotime, тож це фантастична відповідь. Дякую!
— Fusty

Останній випуск Locutus (7 вересня 2018 р. На цей час) не обробляє рядки типу "вчора 19:00".
— Ніколас

4

Я заздрю ​​strtotime () у php, але я роблю це у javascript, використовуючи момент. Не такий солодкий, як від php, але теж робить фокус акуратно.

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

Переходьте вперед і назад, використовуючи subtract()і add()разом з endOf()і startOf():

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

0

Підтримка браузера для розбору рядків суперечлива . Оскільки немає специфікації, які формати слід підтримувати, те, що працює в деяких браузерах, не працюватиме в інших браузерах.

Спробуйте Moment.js - він забезпечує функцію крос-браузерного аналізу дат :

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

Це не повністю відповідає на запитання (і має негативний бал). Чи є спосіб відкликати нагороду?
— Westy92

0

Є декілька модулів, які забезпечують подібну поведінку, але не зовсім як у strtotime PHP. Серед кількох альтернатив, які я виявив, date-util дає найкращі результати.


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>


Попередження про припинення використання: надане значення не у визнаному форматі ISO. момент будівництво повертається до jsDate() - оооо ... те саме, що new Date(strdate)насправді ...
— обман

0

Можливо, ви можете скористатися зразковою функцією, наприклад:

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;

`

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.