Search code examples
rainmeter

Rainmeter date and time subtraction not working


I am trying to create a rainmeter skin for the counting streak. Here is my code:

[Rainmeter]
Update=1000

[Variables]
StartDateTime=2024-02-07T17:30:00

[MeasureStreak]
Measure=Calc
Formula=Floor((Now - !StartDateTime) / (24*3600)) ; Calculate streak as number of days since the start date
DynamicVariables=1

[MeasureHours]
Measure=Calc
Formula=(Floor((Now - !StartDateTime) / 3600)) % 24 ; Calculate remaining hours

[MeasureMinutes]
Measure=Calc
Formula=(Floor((Now - !StartDateTime) / 60)) % 60 ; Calculate remaining minutes

[MeterStreak]
Meter=String
MeasureName=MeasureStreak
Text=Streak: [MeasureStreak] days, [MeasureHours] hours, [MeasureMinutes] minutes
FontFace=Arial
FontSize=12
FontColor=255,255,255,255
SolidColor=0,0,0,150
AntiAlias=1
Padding=5,5,5,5

However, the counter is not working and is always counting 0. What is the problem here?


Solution

  • This is the code I did for the streak, Idk if the hours and minutes are right, but the days are.

    [Rainmeter]
    Update=1000
    
    [Variables]
    StartDateTime=1707331800
    
    [MeasureTimeYear]
    measure=Time
    Format=%Y
    
    [MeasureTimeMonth]
    measure=Time
    Format=%m
    
    [MeasureTimeDay]
    measure=Time
    Format=%d
    
    [MeasureTimeHour]
    measure=Time
    Format=%H
    
    [MeasureTimeMinute]
    measure=Time
    Format=%M
    
    [MeasureTimeSeconds]
    measure=Time
    Format=%S
    
    
    [MeasureUnixTimestamp]
    measure=Script
    ScriptFile=#@#\Scripts\Streak.lua
    Function=Update
    DynamicVariables=1
    
    [measureminutes]
    measure=calc
    formula=(floor((MeasureUnixTimestamp - #StartDateTime#) / 60)) % 60
    
    [measurestreak]
    measure=calc
    Formula=floor((MeasureUnixTimestamp - #StartDateTime#) / 86400)
    dynamicvariables=1
    
    [measurehours]
    measure=calc
    formula=(floor((MeasureUnixTimestamp - #StartDateTime#) / 3600)) % 24
    
    [meterstreak]
    meter=string
    measurename=measurestreak
    measurename2=measurehours
    measurename3=measureminutes
    Text=Streak: %1 days, %2 hours, %3 minutes
    fontface=arial
    fontsize=12
    fontcolor=255,255,255,255
    solidcolor=0,0,0,150
    antialias=1
    padding=5,5,5,5
    

    You will need to Create a Lua File whit this code:

    function ConvertToUnixTimestamp()
        local year = SKIN:GetMeasure("MeasureTimeYear"):GetValue()
        local month = SKIN:GetMeasure("MeasureTimeMonth"):GetValue()
        local day = SKIN:GetMeasure("MeasureTimeDay"):GetValue()
        local hours = SKIN:GetMeasure("MeasureTimeHour"):GetValue()
        local minutes = SKIN:GetMeasure("MeasureTimeMinute"):GetValue()
        local seconds = SKIN:GetMeasure("MeasureTimeSeconds"):GetValue()
        local dateUnix = os.time({
            year = tonumber(year),
            month = tonumber(month),
            day = tonumber(day),
            hour = tonumber(hours),
            min = tonumber(minutes),
            sec = tonumber(seconds)
         })
         return dateUnix
    end
    function Update()
        return ConvertToUnixTimestamp()
    end
    

    Try this and let me know