Первое, что вам нужно знать, это то, как Sheets и Apps Script интерпретируют форматы даты. Google использует Unix time в своих продуктах, поэтому он начинается с 00:00:00 UTC on 1 January 1970
. Не указание даты означает, что Sheets интерпретирует 09:00:00
как Sat Dec 30 17:09:21 GMT+00:09 1899
.
В вашем случае это не будет иметь большого значения, поскольку вы выводите даты, но я рекомендую написать их как 30/05/2020 09:00:00
, а затем go до Format > Number > Time
.
Что касается скрипта приложений, getValues будет интерпретировать его как нечто похожее на Mon Dec 30 18:00:00 GMT+02:00 2020
, что бесполезно. Используйте метод Date Javascript для форматирования его в объект Date. Затем вы можете использовать getTime, чтобы получить его в миллисекундах (все здесь работает в миллисекундах):
Как только вы получите оба значения времени в миллисекундах, вы можете работать с ними. Вы должны преобразовать их в часы (1 миллисекунда = 3,6e + 6 часов):
var a = e.source.getActiveSheet().getRange(row,7).getValue()
var b = e.source.getActiveSheet().getRange(row,8).getValue()
var a1 = new Date(a).getTime(); //Time in milliseconds
var b1 = new Date(b).getTime(); //Time in milliseconds
var hours = (b1 - a1) / 3.6e+6;
e.source.getActiveSheet().getRange(row,9).setValue(hours);
Это не будет хорошо работать в течение нескольких минут. 1 час и 30 минут составят 1,5 часа.
Решение функции:
Вместо скрипта Apps используйте формулы Sheets для его вычисления. Это так же просто, как установить, например, C1, =B1-A1
;