Проблема с вашим кодом заключается в том, что объект `diff` является экземпляром класса `Date`, который представляет конкретную дату и время. Методы, такие как `getFullYear()`, `getMonth()`, `getDate()`, `getHours()`, `getMinutes()` и `getSeconds()`, возвращают значения на основе указанной даты, а не разницы между двумя датами.
Для правильного подсчета разницы времени между двумя датами в JavaScript можно использовать следующий подход:
```javascript
var today = new Date();
var my_date = new Date("2023-12-29 00:00:00");
var diff = today.getTime() - my_date.getTime(); // разница в миллисекундах
var seconds = Math.floor(diff / 1000); // количество секунд
var minutes = Math.floor(diff / (1000 * 60)); // количество минут
var hours = Math.floor(diff / (1000 * 60 * 60)); // количество часов
var days = Math.floor(diff / (1000 * 60 * 60 * 24)); // количество дней
var months = Math.floor(diff / (1000 * 60 * 60 * 24 * 30)); // количество месяцев
var years = Math.floor(diff / (1000 * 60 * 60 * 24 * 365)); // количество лет
console.log("лет: " + years, "месяцев: " + months, "дней: " + days, "часов: " + hours, "минут: " + minutes, "секунд: " + seconds);
```
В этом коде мы сначала вычисляем разницу между двумя датами в миллисекундах, затем используем деление и математические функции `Math.floor()` для получения разницы в секундах, минутах, часах, днях, месяцах и годах.
Такой подход будет более эффективным и точным для вычисления разницы между двумя датами.