softwerkskammer/Agora — pull request #329 by marcphilipp (2013-08-07 21:43:28+00:00)
Title: Activities API sucht mit UTC-Zeitstempeln

Beim Erstellen einer Activity wird das Datum mit `moment.utc(String)` geparst. Beim Laden der Activities aus der Mongo wird abhängig vom aktuellen Zeitpunkt "jetzt" geladen.

## Problem

Problematisch ist jetzt folgendes:

```javascript
> moment.utc('2013-02-04 12:34').format()
'2013-02-04T12:34:00+00:00'
> moment('2013-02-04 12:34').utc().format()
'2013-02-04T11:34:00+00:00'
```

Die beiden Statements liefern richtigerweise unterschiedliche Uhrzeiten. Im ersten Fall wird `12:34+00:00` geparst, im zweiten `12:34+01:00` und danach in UTC umgerechnet.

Somit sind auch die Unix-Timestamps unterschiedlich:

```javascript
> moment('2013-02-04 12:34').utc().unix()
1359977640
> moment.utc('2013-02-04 12:34').unix()
1359981240
```

Möchte man nun aber jetzt in UTC bekommt man mit `moment.utc()` und `moment()` die gleiche Uhrzeit zurück:

```javascript
> var utc = moment.utc()
> utc.unix()
1375910990
> utc.format()
'2013-08-07T21:29:50+00:00'
```

bzw.

```javascript
> var local = moment()
> local.unix()
1375910990
> local.format()
'2013-08-07T23:29:50+02:00'
```

## Workaround

Um mit der richtigen Uhrzeit anzufragen, muss man den Zeitzonen-Offset dazuaddieren bzw. draufaddieren. Seltsamerweise liefert `moment#zone()` den Offset in Minuten mit umgedrehtem Vorzeichen:

```javascript
> local.zone()
-120
```

Aus +2 Stunden werden also -120 Minuten. Die muss man jetzt vom UTC Zeitstempel abziehen:

```javascript
> var umgerechnet = utc.clone().subtract('m', local.zone())
> umgerechnet.format()
'2013-08-07T23:29:50+00:00'
> umgerechnet.unix()
1375918190
```

Genau das macht die Funktion `toUTC`. Sie behandelt also die lokale Zeit so, als wäre sie in UTC. Genau das gleiche macht im Prinzip auch der Konstruktor von Activity.