I can see nothing unexpected. Midnight in UTC is 8 PM the day before in New York, at least in the summer time. Timestamps are always UTC. This is the reason why your second attempt $from = DrupalDateTime::createFromFormat('U', strtotime('last week monday'))->getTimestamp(); can be reduced to $from = strtotime('last week monday'); without changing the result. So don't convert to UTC timestamps. You can specify the timezone when creating the DateTime object: $from = (new DrupalDateTime('last week monday', 'America/New_York'))->render(); results in "2022-06-13 00:00:00 America/New_York" Which will internally use a different timestamp than before, but this is only relevant if you convert it to a different timezone, for example to store it in the database.