**Update:** It turns out that this approach has an advantage over the others posted in that it can handle different settings for `BarOrigin` without modification.

    BoxWhiskerChart[preP2[data2, durations2], 
         ChartLabels -> (Style[#, 20] & /@ {"A", "B", "C", "D"}), 
         ChartStyle -> 63, BarSpacing -> 0, ImageSize -> 400, 
         Method -> {"BoxWidth" -> "Scaled", "EqualSpacing" -> False}, 
         ChartElementFunction -> ceF2["GlassBoxWhisker"], 
         BarOrigin -> #] & /@ {Bottom, Top, Left, Right} // Partition[#, 2] & // Grid
[![enter image description here][1]][1]



----------------
**Original answer:**

For practical purposes this question is solved by the two answers above. This answer, out of curiosity, takes up the puzzle 
>**_Is it possible to apply a list of durations to BoxWidth somehow?_**

That is, can we somehow use `"BoxWidth"` to reflect durations rather than sample sizes. 

A simple trick to achieve this is to use a fake data set with (1) sample sizes that depend on `durations` so that using the `"BoxWidth" -> "Scaled"` does give the desired bar widths, (2) actual data used as metadata so that its quantiles can be used inside the `ChartElementFunction` to set the correct `"BoxRange"` and produce the correct primitives. We also set (i) `BarSpacing -> 0` to avoid more complicated sample size calculations, (ii) `"EqualSpacing" -> False` to avoid complications with tick/ label positions.

    ClearAll[ceF2, preP2]
    ceF2 [f_: "BoxWhisker"] := (Module[{br = Quantile[#3[[1, 1]], {0., .25, .5, .75, 1.}]}, 
     Charting`ChartStyleInformation["BoxRange"] = br; 
     ChartElementDataFunction[f][{#[[1]] + #3[[1, 2]] - Mean[#[[1]]], #[[2]]}, ##2]] &)

    preP2 = ConstantArray[1, #2^2] -> {#, #3} & @@@ Transpose[{#, 5 Normalize[#2, GCD @@ # &],
     Range[Length@#] - .5}] &;

**Examples:**

    data = {{1, 4, 3, 5, 1, 2}, {1, 5, 4, 3, 3, 4, 4, 2, 3, 2, 8}};
    durations = {180, 60};

    BoxWhiskerChart[preP2[data, durations], 
     ChartLabels -> (Style[#, 20] & /@ {"A", "B"}), ChartStyle -> 63, 
     BarSpacing -> 0, Method -> {"BoxWidth" -> "Scaled", "EqualSpacing" -> False}, 
     ChartElementFunction -> ceF2["GlassBoxWhisker"]]
[![enter image description here][2]][2]


    data2 = {{1, 4, 3, 5, 1, 2}, {1, 5, 4, 3, 3}, {4, 2, 3, 2, 8},   
     {1, 5, 4, 3, 3, 4, 4, 2, 3, 2, 8}};
    durations2 = {180, 60, 120, 90};
    BoxWhiskerChart[preP2[data2, durations2], 
     ChartLabels -> (Style[#, 20] & /@ {"A", "B", "C", "D"}), ChartStyle -> 63, 
     BarSpacing -> 0, Method -> {"BoxWidth" -> "Scaled", "EqualSpacing" -> False}, 
     ChartElementFunction -> ceF2["GlassBoxWhisker"]]
[![enter image description here][3]][3]


  [1]: https://i.sstatic.net/eoBe9.png
  [2]: https://i.sstatic.net/Ker6t.png
  [3]: https://i.sstatic.net/iHtpf.png