Как вычесть два часа из JS? - PullRequest
0 голосов
/ 07 августа 2020

Как рассчитать продолжительность определенного действия, выполняемого между eq 12:00:00 и 14:30:00?

Я пробую это:

const a = 12:00:00;
const b = 14:30:00;

var date = new Date();
cont c = date.setTime(a) - date.setTime(b);
console.log(c) //error instead of 02:30:00

, но это не работает: /

Ответы [ 4 ]

0 голосов
/ 07 августа 2020

Здесь пропущено несколько вещей

  1. нет типа в js или в ts, которые можно создать с помощью синтаксиса NN: NN: NN, где N - число
  2. Date.protorype. setTime () принимает в качестве аргумента количество миллисекунд, прошедших с эпохи Unix (00:00:00 01.01.1970), может быть полезно использовать setHours и setMinutes вместо
  3. вы можете выполнять операции с датами, как они выражены в миллисекунды с Unix эпохи
const a = new Date();
const b = new Date();

// set a as 12:00:00 (of today)
a.setHours(12)
a.setMinutes(0)
a.setSeconds(0)
a.setMilliseconds(0)

// set a as 14:30:00 (of today)
b.setHours(14)
b.setMinutes(30)
b.setSeconds(0)
b.setMilliseconds(0)
    
const c = new Date(b - a) // Thu Jan 01 1970 03:30:00
console.log(`${c.getHours()}:${c.getMinutes()}`)

некоторую документацию можно найти здесь, на developer.mozilla.org

, как указано в других ответах , вы также можете использовать setHours для всех вышеуказанных методов date.prototype, ie

console.log(
    new Date(new Date().setHours(14,30,0,0) - new Date().setHours(12,0,0,0)))
)
// will print in the console Thu Jan 01 1970 03:30:00

вот документация

0 голосов
/ 07 августа 2020

Здесь так много неправильного.

const a = 12:00:00;

12: 00: 00 определенно недопустимое значение. Здесь вы уже должны получить ошибку.

Вам нужно создать 2 даты, чтобы вычесть их из другой:

var date1 = new Date();
var date2 = new Date();
// Now you can set the times
date1.setHours(12, 0, 0, 0);
date2.setHours(14, 30, 0, 0);
// Now you can subtract the dates
var timeDifference = Math.abs(date2 - date1) / 36e5;

Разница в миллисекундах, поэтому вам нужно преобразовать их, чтобы получить часы . 36e5 - это то же самое, что 60 * 60 * 1000.

Math.abs есть, поэтому не имеет значения, вычитаете ли вы date1 из date2 или наоборот, он всегда будет возвращать абсолютное значение

0 голосов
/ 07 августа 2020

Надеюсь, это сработает для вас, если вам нужна продолжительность времени. Я сделал с моментом.

let a = moment([14,30,00], "HH:mm:ss")
let b = moment([12,00,00], "HH:mm:ss")
document.write(a.diff(b, 'minutes'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
0 голосов
/ 07 августа 2020

Метод setTime принимает временную метку, поэтому вы не можете передать строку, представляющую часы, но вместо этого вы можете использовать метод setHours

Date.setHours(hour, min, sec, millisec);

, поэтому ваш код должен выглядеть следующим образом

const a = [12, 0, 0];
const b = [14, 30, 0];

var date = new Date();
const c = date.setHours(...b) - date.setHours(...a);
console.log(c) 

вы получите разницу между двумя значениями времени в миллисекундах, вы можете отформатировать ее по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...