diff --git a/pydantic/datetime_parse.py b/pydantic/datetime_parse.py
--- a/pydantic/datetime_parse.py
+++ b/pydantic/datetime_parse.py
@@ -75,7 +75,7 @@ def get_numeric(value: StrBytesIntFloat, native_expected_type: str) -> Union[Non
 
 
 def from_unix_seconds(seconds: Union[int, float]) -> datetime:
-    while seconds > MS_WATERSHED:
+    while abs(seconds) > MS_WATERSHED:
         seconds /= 1000
     dt = EPOCH + timedelta(seconds=seconds)
     return dt.replace(tzinfo=timezone.utc)

Happy to accept a PR to fix this.

I guess we should:
* raise the correct error resulting in a validation error if the datetime is out of bounds
* accept negative timestamps if they result in valid datetimes - there's nothing implicitly wrong with the unix timestamp of `-1`. Stuff happened before 1970 apparently.
* comparing with `MS_WATERSHED` as an absolute number makes sense I suppose, we would just need to update the docs to be explicit.
I don't get this :

>     * raise the correct error resulting in a validation error if the datetime is out of bounds

For the rest, everything is running fine and ready for PR


I think it might be fine, I just meant:

make sure passing timestamps like `1_000_000_000_000_000` or `-100_000_000_000_000` cause sensible validation errors not other exceptions.
Yes, it runs fine with these timestamps. The generated `datetime` does not match with the real date as these timestamps are greater than `MS_WATERSHED` but it is parsed without any exception.
diff --git a/tests/test_datetime_parse.py b/tests/test_datetime_parse.py
--- a/tests/test_datetime_parse.py
+++ b/tests/test_datetime_parse.py
@@ -93,6 +93,7 @@ def test_time_parsing(value, result):
         (1_494_012_444, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)),
         # values in ms
         ('1494012444000.883309', datetime(2017, 5, 5, 19, 27, 24, 883, tzinfo=timezone.utc)),
+        ('-1494012444000.883309', datetime(1922, 8, 29, 4, 32, 35, 999117, tzinfo=timezone.utc)),
         (1_494_012_444_000, datetime(2017, 5, 5, 19, 27, 24, tzinfo=timezone.utc)),
         ('2012-04-23T09:15:00', datetime(2012, 4, 23, 9, 15)),
         ('2012-4-9 4:8:16', datetime(2012, 4, 9, 4, 8, 16)),

JavaScript negative timestamp are not supported
# Bug

When parsing a JavaScript positive timestamp (number of milliseconds since EPOCH), pydantic parses it properly. However, for a negative JavaScript timestamp (before 1st January 1970), a `date value out of range` error is thrown.

```
  File "pydantic/main.py", line 447, in pydantic.main.BaseModel.parse_obj
  File "pydantic/main.py", line 336, in pydantic.main.BaseModel.__init__
  File "pydantic/main.py", line 887, in pydantic.main.validate_model
  File "pydantic/fields.py", line 549, in pydantic.fields.ModelField.validate
  File "pydantic/fields.py", line 704, in pydantic.fields.ModelField._validate_singleton
  File "pydantic/fields.py", line 711, in pydantic.fields.ModelField._apply_validators
  File "pydantic/class_validators.py", line 313, in pydantic.class_validators._generic_validator_basic.lambda11
  File "pydantic/datetime_parse.py", line 169, in pydantic.datetime_parse.parse_datetime
  File "pydantic/datetime_parse.py", line 80, in pydantic.datetime_parse.from_unix_seconds
OverflowError: date value out of range
```

## Version

Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.5.1
            pydantic compiled: True
                 install path: /Users/thibaud/Documents/Programmation/Scopyleft/Terrapeutes/aposto-server/venv/lib/python3.7/site-packages/pydantic
               python version: 3.7.3 (default, Mar  6 2020, 22:34:30)  [Clang 11.0.3 (clang-1103.0.32.29)]
                     platform: Darwin-19.5.0-x86_64-i386-64bit
     optional deps. installed: ['typing-extensions', 'email-validator']
```

## Code example

The following code raises the describe error (while it would correctly work with `{ "jsTimestamp": 1118102400000 }`).

```py
from datetime import datetime

from pydantic import BaseModel


class MyModel(BaseModel):
    jsTimestamp: datetime

MyModel.parse_obj({ "jsTimestamp": -1118102400000 })
```

## Possible solution

A solution would be to update the `from_unix_seconds` function in _datetime_parse.py_ to compare `seconds` with `MS_WATERSHED` as absolute value.

tests/test_datetime_parse.py::test_datetime_parsing[-1494012444000.883309-result6]
tests/test_datetime_parse.py::test_date_parsing[1494012444.883309-result0] tests/test_datetime_parse.py::test_date_parsing[1494012444.883309-result1] tests/test_datetime_parse.py::test_date_parsing[1494012444.883309-result2] tests/test_datetime_parse.py::test_date_parsing[1494012444-result3] tests/test_datetime_parse.py::test_date_parsing[1494012444-result4] tests/test_datetime_parse.py::test_date_parsing[0-result5] tests/test_datetime_parse.py::test_date_parsing[2012-04-23-result6] tests/test_datetime_parse.py::test_date_parsing[2012-04-23-result7] tests/test_datetime_parse.py::test_date_parsing[2012-4-9-result8] tests/test_datetime_parse.py::test_date_parsing[value9-result9] tests/test_datetime_parse.py::test_date_parsing[value10-result10] tests/test_datetime_parse.py::test_date_parsing[x20120423-DateError] tests/test_datetime_parse.py::test_date_parsing[2012-04-56-DateError] tests/test_datetime_parse.py::test_date_parsing[19999999999-result13] tests/test_datetime_parse.py::test_date_parsing[20000000001-result14] tests/test_datetime_parse.py::test_date_parsing[1549316052-result15] tests/test_datetime_parse.py::test_date_parsing[1549316052104-result16] tests/test_datetime_parse.py::test_date_parsing[1549316052104324-result17] tests/test_datetime_parse.py::test_date_parsing[1549316052104324096-result18] tests/test_datetime_parse.py::test_time_parsing[09:15:00-result0] tests/test_datetime_parse.py::test_time_parsing[10:10-result1] tests/test_datetime_parse.py::test_time_parsing[10:20:30.400-result2] tests/test_datetime_parse.py::test_time_parsing[10:20:30.400-result3] tests/test_datetime_parse.py::test_time_parsing[4:8:16-result4] tests/test_datetime_parse.py::test_time_parsing[value5-result5] tests/test_datetime_parse.py::test_time_parsing[3610-result6] tests/test_datetime_parse.py::test_time_parsing[3600.5-result7] tests/test_datetime_parse.py::test_time_parsing[86399-result8] tests/test_datetime_parse.py::test_time_parsing[86400-TimeError] tests/test_datetime_parse.py::test_time_parsing[xxx-TimeError] tests/test_datetime_parse.py::test_time_parsing[091500-TimeError0] tests/test_datetime_parse.py::test_time_parsing[091500-TimeError1] tests/test_datetime_parse.py::test_time_parsing[09:15:90-TimeError] tests/test_datetime_parse.py::test_datetime_parsing[1494012444.883309-result0] tests/test_datetime_parse.py::test_datetime_parsing[1494012444.883309-result1] tests/test_datetime_parse.py::test_datetime_parsing[1494012444-result2] tests/test_datetime_parse.py::test_datetime_parsing[1494012444-result3] tests/test_datetime_parse.py::test_datetime_parsing[1494012444-result4] tests/test_datetime_parse.py::test_datetime_parsing[1494012444000.883309-result5] tests/test_datetime_parse.py::test_datetime_parsing[1494012444000-result7] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T09:15:00-result8] tests/test_datetime_parse.py::test_datetime_parsing[2012-4-9 tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T09:15:00Z-result10] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T10:20:30.400+02:30-result12] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T10:20:30.400+02-result13] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T10:20:30.400-02-result14] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-23T10:20:30.400-02-result15] tests/test_datetime_parse.py::test_datetime_parsing[value16-result16] tests/test_datetime_parse.py::test_datetime_parsing[0-result17] tests/test_datetime_parse.py::test_datetime_parsing[x20120423091500-DateTimeError] tests/test_datetime_parse.py::test_datetime_parsing[2012-04-56T09:15:90-DateTimeError] tests/test_datetime_parse.py::test_datetime_parsing[19999999999-result20] tests/test_datetime_parse.py::test_datetime_parsing[20000000001-result21] tests/test_datetime_parse.py::test_datetime_parsing[1549316052-result22] tests/test_datetime_parse.py::test_datetime_parsing[1549316052104-result23] tests/test_datetime_parse.py::test_datetime_parsing[1549316052104324-result24] tests/test_datetime_parse.py::test_datetime_parsing[1549316052104324096-result25] tests/test_datetime_parse.py::test_parse_python_format[delta0] tests/test_datetime_parse.py::test_parse_python_format[delta1] tests/test_datetime_parse.py::test_parse_python_format[delta2] tests/test_datetime_parse.py::test_parse_python_format[delta3] tests/test_datetime_parse.py::test_parse_python_format[delta4] tests/test_datetime_parse.py::test_parse_python_format[delta5] tests/test_datetime_parse.py::test_parse_python_format[delta6] tests/test_datetime_parse.py::test_parse_durations[value0-result0] tests/test_datetime_parse.py::test_parse_durations[30-result1] tests/test_datetime_parse.py::test_parse_durations[30-result2] tests/test_datetime_parse.py::test_parse_durations[30.1-result3] tests/test_datetime_parse.py::test_parse_durations[15:30-result4] tests/test_datetime_parse.py::test_parse_durations[5:30-result5] tests/test_datetime_parse.py::test_parse_durations[10:15:30-result6] tests/test_datetime_parse.py::test_parse_durations[1:15:30-result7] tests/test_datetime_parse.py::test_parse_durations[100:200:300-result8] tests/test_datetime_parse.py::test_parse_durations[4 tests/test_datetime_parse.py::test_parse_durations[15:30.1-result11] tests/test_datetime_parse.py::test_parse_durations[15:30.01-result12] tests/test_datetime_parse.py::test_parse_durations[15:30.001-result13] tests/test_datetime_parse.py::test_parse_durations[15:30.0001-result14] tests/test_datetime_parse.py::test_parse_durations[15:30.00001-result15] tests/test_datetime_parse.py::test_parse_durations[15:30.000001-result16] tests/test_datetime_parse.py::test_parse_durations[15:30.000001-result17] tests/test_datetime_parse.py::test_parse_durations[-4 tests/test_datetime_parse.py::test_parse_durations[-172800-result19] tests/test_datetime_parse.py::test_parse_durations[-15:30-result20] tests/test_datetime_parse.py::test_parse_durations[-1:15:30-result21] tests/test_datetime_parse.py::test_parse_durations[-30.1-result22] tests/test_datetime_parse.py::test_parse_durations[P4Y-DurationError] tests/test_datetime_parse.py::test_parse_durations[P4M-DurationError] tests/test_datetime_parse.py::test_parse_durations[P4W-DurationError] tests/test_datetime_parse.py::test_parse_durations[P4D-result26] tests/test_datetime_parse.py::test_parse_durations[P0.5D-result27] tests/test_datetime_parse.py::test_parse_durations[PT5H-result28] tests/test_datetime_parse.py::test_parse_durations[PT5M-result29] tests/test_datetime_parse.py::test_parse_durations[PT5S-result30] tests/test_datetime_parse.py::test_parse_durations[PT0.000005S-result31] tests/test_datetime_parse.py::test_parse_durations[PT0.000005S-result32] tests/test_datetime_parse.py::test_model_type_errors[dt-value0-invalid tests/test_datetime_parse.py::test_model_type_errors[dt-value1-invalid tests/test_datetime_parse.py::test_model_type_errors[dt-object-invalid tests/test_datetime_parse.py::test_model_type_errors[d-value3-invalid tests/test_datetime_parse.py::test_model_type_errors[d-value4-invalid tests/test_datetime_parse.py::test_model_type_errors[d-object-invalid tests/test_datetime_parse.py::test_model_type_errors[t-value6-invalid tests/test_datetime_parse.py::test_model_type_errors[t-value7-invalid tests/test_datetime_parse.py::test_model_type_errors[t-object-invalid tests/test_datetime_parse.py::test_model_type_errors[td-value9-invalid tests/test_datetime_parse.py::test_model_type_errors[td-value10-invalid tests/test_datetime_parse.py::test_model_type_errors[td-object-invalid tests/test_datetime_parse.py::test_unicode_decode_error[dt0] tests/test_datetime_parse.py::test_unicode_decode_error[d] tests/test_datetime_parse.py::test_unicode_decode_error[t] tests/test_datetime_parse.py::test_unicode_decode_error[dt1]