Thanks a lot @empottasch !
you actually captured my needs perfectly. 
But i still find result differences if i take it from any TF higher than EOD (this is known, as Tomasz explained at other thread.
Not trying to steal your work, please allow me to modify your code. My goal is to make it also works for any base TF in finding "any" higher TF (esp. => EOD) of lastbarend.
Well I know this modified code (below) is not the most elegant solution, since there are many constants that i need to put in hardcoded (although i don't know the real logic behind it) 
So this is only a workaround approach for me,... and might not works for:
- other RT datafeed timestamp (i use custom unofficial/unsupported MT4 plugin)
- different timeshift offset (mine is +5)
- different intraday settings at preferences (i use default start time of interval & override weekly/montly bars)
For someone wants to try using this code, please BE AWARE, this is working for my needs with above settings. I post this here, hoping that maybe someone else are interested to make/modified it to be more generic and proven to be used in any condition.
TimeShift = 5;
function GetSecLeftAtTF( OtherTF, timeshift )
{
timeinseconds = Hour() * 60 * 60 + Minute() * 60 + Second();
lastbarOfPeriod = TimeFrameExpand( 1, OtherTF, expandPoint );
lastbarOfPeriod[BarCount - 1] = 0;
t1 = LastValue( ValueWhen( lastbarOfPeriod, timeinseconds, 1 ) );
t2 = LastValue( timeinseconds );
if( OtherTF != 432001 OR OtherTF != 86400)
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) );
if( OtherTF == 86400 )
{
if( Interval( 0 ) == 60 )
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) + timeshift*3600 - 60) ; // dont know why -60 :D
}
else
if( Interval( 0 ) == 14400 )
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) - 3600 ) ; // dont know why -3600 :D
}
else
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) ) ;
}
}
else
if( OtherTF == 432001 )
{
if( Interval( 0 ) == 60 )
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) - 86400 + timeshift*3600 - 60 ) ; // dont know why -86400 & -60 :D
}
else
if( Interval( 0 ) == 300 )
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) - 86400 + timeshift*3600 - 300 ) ; // dont know why -86400 & -300 :D
}
else
if( Interval( 0 ) == 14400 )
{
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) - 86400 - 3600 ) ; // dont know why -86400-3600 :D
}
else
VarSet( "SecsToGoTF" + OtherTF, Status( "lastbartimeleft" ) - 86400 ); // dont know why -86400 :D
}
VarSet( "TimeLeftAtTF" + OtherTF, int( OtherTF - ( t2 - t1 ) ) + VarGet( "SecsToGoTF" + OtherTF ) );
}
return VarGet( "TimeLeftAtTF" + OtherTF );
}
/*
Notes: in this case, you are trying to access data from higher timeframe.
so this can only show VALID seconds left, IF your "base timeframe" is lower than target timeframe
*/
OtherTF = StrToNum(ParamList("Target Timeframe (seconds)", "60|300|900|1800|3600|14400|86400|432001", 300 ));
GetSecLeftAtTF(OtherTF, TimeShift);
Title="";
GfxTextOut("Time Shift: "+timeshift,0,0);
GfxTextOut("Local Time: "+Now(2),0,10);
GfxTextOut("BaseChart: s"+Interval(0),0,30);
GfxTextOut("Seconds Left at : s" + OtherTF +" Chart :"+ GetSecLeftAtTF(OtherTF, TimeShift) + " seconds",0,40);