Hi.
It's a context problem. If you log the keyword this to the console you'll see it refers to the window object and not to the main timeline.
There are at least 3 ways of solving this.
1 - Creating a global reference.
var root = this;
var date = new Date();
hr = date.getHours();
setTimeout(function()
{
if (hr >= 12)
root.BoasTxT.text = "Bom dia";
else
root.BoasTxT.text = "Boa tarde";
}, 1);
2 - Binding.
var date = new Date();
hr = date.getHours();
setTimeout(function()
{
if (hr >= 12)
this.BoasTxT.text = "Bom dia";
else
this.BoasTxT.text = "Boa tarde";
}.bind(this), 1);
3 - Passing the current timeline as an argument to the setTimeout method.
var date = new Date();
hr = date.getHours();
setTimeout(function(root)
{
if (hr >= 12)
root.BoasTxT.text = "Bom dia";
else
root.BoasTxT.text = "Boa tarde";
}, 1, this);
Anyway, I don't think you need the setTimeout method at all. You can just change the text property of regular dynamic text fields right away. This setTimeout approach is generally used as workaround for component text fields (Window > Components > User Interface).
I hope it helps.
Regards,
JC