Firstly, when posting code (and output) in the forum, please can you use the preformatted text </> button. It really helps us with readability, and copying and pasting your code (we don’t have to faff about replacing curly quote marks to get things working).
Your second approach is the more correct one. The lastLogon attribute is not replicated so you need to query all the domain controllers and find the most recent value. This is the most accurate but least convenient way of determining the last logon.
LastLogonDate and LastLogonTimeStamp are essentially the same thing. The LastLogonDate is PowerShell’s calculation (it converts it to a human readable date format) of the LastLogonTimeStamp attribute.
Here’s a couple of functions I wrote to do the hard work for me. Each will query all dcs to find the latest logon for the specified user(s). The only difference between the functions is one requires the ad RSAT tools and the other doesn’t.