6

DateObjects can be of varying physical dimensions.

CurrentDate[Today, #] & /@ {"Day", "Month", "Year"}

Mathematica graphics

How do you get the size of a DateObject? I tried AbsoluteOptions[Today] but it returns unevaluated. Ideas?

Edmund
  • 42,267
  • 3
  • 51
  • 143

3 Answers3

8

Update

(After the clarification of the question, my original answer was not on target)

An alternative to using ImageDimensions is to use the "RasterSize" property with Rasterize:

dates = CurrentDate[Today,#]& /@ {"Day","Month","Year"};

Rasterize[#, "RasterSize"]& /@ dates

{{148, 26}, {121, 26}, {90, 26}}

Original answer

You can use DateValue to determine the granularity of a DateObject:

dates = CurrentDate[Today, #] & /@ {"Day", "Month", "Year"};

DateValue[#, "Granularity"]& /@ dates

{"Day", "Month", "Year"}

Carl Woll
  • 130,679
  • 6
  • 243
  • 355
  • Thanks. But meant size as in dimensions. Not size as in granularity. Clarified in question. – Edmund Feb 27 '18 at 15:36
6

You can find the size in pixels by using ImageDimensions and Rasterize, like so:

Map[ImageDimensions@*Rasterize,
 CurrentDate[Today, #] & /@ {"Day", "Month", "Year"}]
(* {{148, 26}, {121, 26}, {90, 26}} *)
Pillsy
  • 18,498
  • 2
  • 46
  • 92
6

Here's a way to do it entirely in the FE (i.e. without a full Rasterize call, which is done in the FE anyway):

getBoxSize[c_Cell] :=
  {#[[1]], Total@#[[2 ;;]]} &@First@
    FrontEndExecute@GetBoundingBoxSizePacket[c];
getBoxSize[e_] := getBoxSize[Cell[BoxData@ToBoxes[e]]]

getBoxSize@CurrentDate[#] & /@ {"Day", "Month", "Year"}

{{148., 25.}, {121., 25.}, {90., 25.}}

Note that this is much faster than using a raw Rasterize:

getBoxSize@CurrentDate[#] & /@ {"Day", "Month", 
   "Year"} // RepeatedTiming

{0.04, {{151., 25.}, {121., 25.}, {90., 25.}}}

Rasterize[CurrentDate[#], "RasterSize"] & /@ {"Day", "Month", 
   "Year"} // RepeatedTiming

{0.24, {{151, 26}, {121, 26}, {90, 26}}}
b3m2a1
  • 46,870
  • 3
  • 92
  • 239