Tenho um problema com macOS Date() que está me deixando maluco.
Eu simplesmente quero alterar Date() para o primeiro do mesmo mês e ano. Parece trivial...
import Foundation
extension Date {
func firstOfMonth() -> Date {
let calendar = Calendar.current
return calendar.date(bySetting: .day , value: 1, of: self) ?? Date()
}
}
Quando chamo a função, recebo o primeiro dia do mês seguinte.
Tentei definir o calendário para UTC, por precaução, e ainda o mesmo problema
Aqui está o que estou vendo ao usar a função
Presumo que seja algum bloqueio mental que estou tendo aqui ou simplesmente sinais de aproximação da senilidade. Quaisquer sugestões recebidas com gratidão.
Isso é por causa das configurações do calendário.
Você pode obter o primeiro dia do mês atual descartando o componente do dia como:
Ele é impresso
2023-09-30 20:30:00 +0000
nas configurações do meu calendário. Porque é a hora correta no fuso horário GMT quando está2023-10-01
aqui no meu fuso horário.Então eu posso fazer isso
2023-10-01
passando umGMT
calendário como:Agora ele imprime
⚠️ Nota importante! O calendário é muito mais complicado do que parece e não posso garantir a solução acima ou qualquer outra! Você deve ter uma boa cobertura de teste para isso.2023-10-01 00:00:00 +0000
conforme o esperadovocê poderia tentar algo assim, para retornar o primeiro do mesmo mês e ano.