"R.Smith" wrote,

> On 2015-07-29 06:34 PM, jose isaias cabrera wrote:
>> Greetings!
>>
>> I am trying to calculate a date using sqlite date and time functions. 
>> Perhaps, one of you GURUs can help this poor soul.  I have been trying to 
>> figure it out, but I know I am lack the understanding.  I read the 
>> documentation for it,
>>
>> https://www.sqlite.org/lang_datefunc.html
>>
>> but I can not seem to find the way to do this.  The idea is this one, 
>> there will be an input of hours, which in this case will be 5.5 hours, 
>> that will be added to the actual time.  For example, if it's 10AM, adding 
>> 5.5 hours will give 3:30 PM.  This is easy,
>>
>> datetime('now','localtime','+5.5 hours')
>>
>> the problem happens if it is after 5PM. For example, say it is 2PM, 
>> adding 5.5 hours to it will give 7:30PM.  What I am trying to do is to 
>> add the amount of hours over 5PM, which is,
>>
>> time('now','localtime','+5.5 hours') - '17:00:00'
>>
>> to 8.5 hours to the start of the next day and select that date and time.
>
> Finally, an interesting question :)
>
> It's easy to do, but you need to think of time in days:
>
>
> WITH DTVals( EndOfToday, NewTimeToday, NewTimeTomorrow ) AS (
>   SELECT
>     datetime( 'now', 'localtime', 'start of day', '+17 hours' ),       // 
> End of Today
>     datetime( 'now', 'localtime', '+5.5 hours' ),                      // 
> New time if today
>     datetime( 'now', 'localtime', 'start of day', '+1 day', '+8.5 hours', 
> '+5.5 hours' )    // New time if tomorrow
> )
> SELECT
>   CASE WHEN NewTimeToday <= EndOfToday THEN NewTimeToday ELSE 
> NewTimeTomorrow END
> FROM DTVals;
>
>
> The whole CTE isn't necessary, it's just to show more clear what is 
> happening. Once you understand why the  above works, the calculation can 
> be optimized a lot and made faster.
> (All those spaces are just for clarity, they may be omitted)

The above almost works.  NewTimeTomorrow needs to have the amount of hours 
over 17:00:00. as of right now you have it as,

datetime( 'now', 'localtime', 'start of day', '+1 day', '+8.5 hours', '+5.5 
hours' )    // New time if tomorrow

which is not correct. :-) .  The last entry, '+5.5 hours' should  be the 
result of

time('now','localtime','+5.5 hours') - '17:00:00'

So, if time now is 15:00:00, then, NewTimeTomorrow would be,

datetime( 'now', 'localtime', 'start of day', '+1 day', '+8.5 hours', '+3.5 
hours' )

So, can this be possible.  I should probably say that 5.5 hours is not 
always 5.5 hours.  This is a variable piece of data.  So, here is your 
change again to work something interesting again. :-)  Thanks.

jos?







Reply via email to