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.