PHP-具有自定义基准年的负长时间戳的可读日期

PHP-具有自定义基准年的负长时间戳的可读日期,php,date,timestamp,jet,Php,Date,Timestamp,Jet,我已经看到了有关StackOverflow的许多问题和答案,其中涵盖了时间戳基于Unix时代的场景,但一直在努力将这些解决方案结合起来,并将它们修改为我提供的数据和自定义基准年的工作解决方案 <?php date_default_timezone_set( 'Europe/London' ); function TransformDate( $iTimeStamp ) { /* Insert transform code here */ $dt = new DateTime( '

我已经看到了有关StackOverflow的许多问题和答案,其中涵盖了时间戳基于Unix时代的场景,但一直在努力将这些解决方案结合起来,并将它们修改为我提供的数据和自定义基准年的工作解决方案

<?php
date_default_timezone_set( 'Europe/London' );

function TransformDate( $iTimeStamp ) {
  /* Insert transform code here */
  $dt = new DateTime( '@' . $iTimeStamp );
  return $dt->format( 'Y-m-d H:i:s' );
}

/* These timestamps should be between Sep-2014 and Jan-2015 */
$aTest = array( '-1554460973', '-1554427073', '-1554142396', '-1554139421' );
foreach( $aTest as $i ) echo( $i . ' - ' . TransformDate( $i ) . "\r\n" );
到目前为止,虽然我得到的最接近的日期是2012年,但12月31日下午14:38的部分可能是正确的:

$iTimeSinceBase = ( $iTimeStamp - strtotime( '2013-01-01' )) / 86400;
$iTimeStamp = strtotime( '2013-01-01' ) + $iTimeSinceBase;
其输出为:

-1554460973 = 2012-12-31 14:38:22
-1554427073 = 2012-12-31 14:38:22
-1554142396 = 2012-12-31 14:38:26
-1554139421 = 2012-12-31 14:38:26

在这一点上,欢迎任何帮助!谢谢。

您的输出无效,应该是1920年,请参阅。您的函数
TransformDate
以UTC时区或
+00:00
偏移量返回格式化的日期时间,您应该记住这一点。您需要将我的输出上方的两行添加到脚本中,我在脚本中添加注释“Insert Transform code Here”,以获得2012年的日期。谢谢你在UTC-0偏移量上的顶部。对不起,我不知道你需要什么。。。您希望从输入中获得什么样的输出
-1554460973
?有趣的是,使用PHP5.5.14添加转换代码后,pastebin返回了一些非常不同的日期-
5578-12-31
9502-01-01
2013-01-01
2794-12-31
。我目前正在运行5.3.4.dev来获取我发布的输出。我不知道为什么不同的PHP版本会影响这一点。我正在寻找与我发布的类似的输出,除了日期必须在2014年9月至2015年1月之间,否则计算方法是错误的。这是我从中获取的数据周期,这些值需要转换为人类可读的日期和时间。
-1554460973 = 2012-12-31 14:38:22
-1554427073 = 2012-12-31 14:38:22
-1554142396 = 2012-12-31 14:38:26
-1554139421 = 2012-12-31 14:38:26