On Tuesday, 10 January 2023 at 03:18:54 UTC, matheus wrote:

The layout isn't like yours, I wrote this using a D Online compiler and I'm very sleepy right now:
```d
import std.stdio, std.string, std.conv, std.datetime;

bool validDate(int y,int m,int d){
   try{
       Date(y,m,d);
       return true;
   }catch(Exception e){}
   return false;
}

void main(){
    int[string] dow;
    int i, y = 2023, m = 1, d = 1;

    for(i=1;i<8;++i){
        dow[to!string(Date(1899,1,i).dayOfWeek)]=i;
    }

    for(m=1;m<13;++m){
write("\n\n\t\t",capitalize(to!string(Date(y,m,1).month)),"\n");

        for(i=1;i<8;++i){
                write(to!string(Date(1899,1,i).dayOfWeek)[0..2], " ");
        }

        writeln();
        int c = dow[to!string(Date(y,m,1).dayOfWeek)];

        for(i=1;i<c;++i){ write("   "); }

        for(d=0;d<32;++d){
            if(c%8==0){c=1;writeln();}
            ++c;
            if(validDate(y,m,d+1)){
                writef("%2s ",d+1);
            }
        }
    }
}
```

You don't need validDate.  Because there is daysInMonth:

```d
      writeln();
      const date = Date(y, m, 1);
      int c = dow[to!string(date.dayOfWeek)];

      for(i = 1; i < c; ++i)
        write("   ");

      for(d = 0; d < 32; ++d)
      {
        if(++c % 9 == 0)
        {
          writeln();
          c = 2;
        }
        if(d < date.daysInMonth)
          writef("%2s ", d + 1);
      }
```

SDB@79

Reply via email to