Index: src/wp-includes/post.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/wp-includes/post.php	(date 1558926153000)
+++ src/wp-includes/post.php	(date 1559215020046)
@@ -3594,9 +3594,10 @@
 			if ( mysql2date( 'U', $post_date_gmt, false ) > mysql2date( 'U', $now, false ) ) {
 				$post_status = 'future';
 			}
-		} elseif ( 'future' == $post_status ) {
-			$now = gmdate( 'Y-m-d H:i:59' );
-			if ( mysql2date( 'U', $post_date_gmt, false ) <= mysql2date( 'U', $now, false ) ) {
+		} elseif ( 'future' === $post_status ) {
+
+			// String comparison to work around far future (year 2038+) scheduled on 32-bit systems.
+			if ( $post_date_gmt <= gmdate( 'Y-m-d H:i:59' ) ) {
 				$post_status = 'publish';
 			}
 		}
Index: tests/phpunit/tests/post/wpInsertPost.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- tests/phpunit/tests/post/wpInsertPost.php	(date 1558926153000)
+++ tests/phpunit/tests/post/wpInsertPost.php	(date 1559214888321)
@@ -302,4 +302,22 @@
 		$this->assertSame( $expected, $actual );
 	}
 
+	function test_scheduled_past_time_should_be_published() {
+
+		$now = new DateTimeImmutable( 'now', new DateTimeZone( 'UTC' ) );
+
+		$post_id = $this->factory()->post->create( [
+			'post_date_gmt' => $now->modify( '-1 year' )->format( 'Y-m-d H:i:s' ),
+			'post_status'   => 'future',
+		] );
+
+		$this->assertEquals( 'publish', get_post_status( $post_id ) );
+
+		$post_id = $this->factory()->post->create( [
+			'post_date_gmt' => $now->modify( '+50 years' )->format( 'Y-m-d H:i:s' ),
+			'post_status'   => 'future',
+		] );
+
+		$this->assertEquals( 'future', get_post_status( $post_id ) );
+	}
 }
