Calculate days from specific date

Hi All,

I think it must be something very simple, but how do I calculate the days from a specific date.

For my example the days from 2018-02-02 till now. (Should be something like 335)

Background: I want to calculate the advance payments of energy and compare them to real consumed energy price to see de difference.

you can use this:

input_datetime:
  detectors_battery:
    name: Detectors Battery
    has_date: true
    has_time: false
    initial: '2019-12-31' 

and this:

sensor:
- platform: template
  sensors:
    detectors_battery_replacement_days2go:
      value_template: '{{ (((states.input_datetime.detectors_battery.attributes.timestamp)-as_timestamp(now())) | int /60/1440) | round(0) }}'
      unit_of_measurement: 'Days'
      entity_id: input_datetime.detectors_battery,sensor.time
8 Likes

I get negative -35 days as a result, how to make it a positive value ?

  - platform: template
    sensors:
      detectors_battery_replacement_days2go:
        value_template: '{{ (((states.input_datetime.detectors_battery.attributes.timestamp)-as_timestamp(now())) | int /60/1440) | round(0) }}'
        entity_id: input_datetime.detectors_battery,sensor.time

  terras_battery:
    name: Terras
    has_date: true
    has_time: false
    initial: '2018-11-29'

Look at the formula.

It uses two timestamps.

It subtracts the current timestamp (now) from the supplied timestamp (input_datetime).

If the supplied timestamp is in the past, the result of the subtraction will be negative.

If the supplied timestamp is in the past and you want the result to be positive, reverse the order of the subtraction.

1 Like

thank working great now.

image

I’ve got it working with another formula:

{{ (as_timestamp(now()) - as_timestamp(“2018-1-31 00:00:00”) ) | timestamp_custom("%j")| int }}

4 Likes

I have this code and it works and gives the correct days between the two dates given.
BUT it will not auto update??? It only update if I reboot, change date manually… why is that?

You must have not included this:

        entity_id: input_datetime.detectors_battery,sensor.time

This is what updates his sensor periodically.

1 Like

I’m sorry, but I don’t understand what you mean… I have
entity_id: input_datetime.detectors_battery

yes but sensor.time is what updates the sensor every minute. Without that, it will only update when the battery’s update, i.e. it will not be live at all times.

EDIT:

you can also use sun.sun if you don’t have sensor.time implemented in your setup.

I have tried " ,sensor.time " also but still no auto update?

Do you have sensor.time implemented? You have to add that component to the system, you just can’t type sensor.time and expect it to work.

2 Likes

Looks like I only had - ‘date_time’ :scream:
Now I have sensor.time as an entity. Tomorrow I will see if it’s working. :grin: Thank you.

Thank you! This is exactly what I was looking for.

how is it possible when the attribute has a time within saved?
must i first replace it?

my value 2022-06-11 15:00:00

i want to calculate how much days from now until the event. i think the problem is the time that is saved in the attribute too.

i tried this

{{ (((states.calendar.famillien_termine.attributes.start_time)-as_timestamp(now())) | int /60/1440) | round(0) }}

It’s better to use state_attr.
And you need to convert the string to a timestamp.

{{ (((as_timestamp(state_attr('calendar.famillien_termine', 'start_time'))-as_timestamp(now())) | int /60/1440) | round(0) }}
1 Like

okay thank you, but you had a little typo in your code, you missing a )

{{ (((as_timestamp(state_attr('calendar.famillien_termine', 'start_time'))-as_timestamp(now()))) | int /60/1440) | round(0) }}

I don’t know what I am missing. I have added the time_date sensor, I have the input_datetime, and I have the tempalte sensor. What I don’t have is that nice card you have. Mind sharing how you created it?

Isn’t it a custom entity card? I think you like the title above the entities?

Hi,

I know, it’s a late reply, but you have to adjust the code.
The round at the end rounds the days, and if the time between now and your appointment is around 4,4 days away, you get a result of 4.
I would expect, that if you expect on a thuesday evening a result of 5, when you have an apointment of the sunday morning. Therefore I would change to rounding to "round(0,‘ceil’). This always round up.