VBScript和PHP之间的时间转换

时间:2014-03-10 16:03:55

标签: php vbscript

我将这个日期值从我需要读取的VBScript应用程序存储到我的数据库中,并在PHP中生成报告。我遇到的问题是将该日期值转换为PHP中的日期值,但我似乎没有任何意义。

从VBScript存储的值是Now()*24*60*60,它生成的实际数字是'3603612890',它应该等于的大致时间是'2014/03/10 11:35:15',给予或接受几秒钟。

如何在PHP中将此数字'3603612890'转换为此值'2014/03/10 11:35:15'

由于

4 个答案:

答案 0 :(得分:0)

试试这个:

date("Y-m-d H:i:s", 3603612890);

要转换其他方式,您需要strtotime()

答案 1 :(得分:0)

使用vbscript将您的时间从unix时代中删除,如下所示:

<强>的VBScript

DateDiff("s", "01/01/1970 00:00:00", Now())

然后用你的PHP。首先设置您的时区,然后将您的整数转换为适当的日期/时间,以便它准确到秒。

<强> PHP

date_default_timezone_set('UTC');
$orig = 1394454630;
$dbTime = date("Y-m-d H:i:s", $orig);
echo $dbTime;

PHPFiddle

从vbscript应用unix epoch base并计算秒数后,PHP的默认日期()函数默认情况下会转换为unix时期。因此,通过添加额外的timezone_set,您可以获得从vbs转换为php的确切时间。

答案 2 :(得分:0)

现有VBScript函数中的错误是计算到秒。我不知道为什么会这样做,但是你必须将它计算回VBScript日期以获得可行的日期:

3603612890 / (24 * 60 * 60)

这导致41708.4825...
这意味着“有点在12:00之前”。在VBScript中,日期中的0.5正好是正午,0.25恰好是6:00等。但是因为24 * 60 * 60 = 86,400而不是100,000;你不能说41708.00060是0:00之后的一分钟,或'2014/03/10 00:01:00',实际上并不是'2014/03/10 00:00:52'

如果您使用VBScript,您可以在1970年1月1日到指定日期之间的秒数内获得Unix纪元:

date2epoch = DateDiff("s", "01/01/1970 00:00:00", myDate)

这导致:1394451290为给定日期。

如果你只有PHP(我不习惯)你可以通过取整数部分得到一天,即30-12-1899之后的天数(不要问为什么,这有一个奇怪的历史)。
00:00:00以来的秒数是decimal part * 86400

答案 3 :(得分:0)

感谢所有分享他们意见的人。

事实证明,有一种非常简单的方法可以一致地转换这些日期。

首先你必须撤消Now()*24*60*60并返回到原始的VBScript Date值41708.48252314815然后在VBScript中有这个神奇的数字,一些基本日期常量,等于从上面的数字中减去的25569然后再将总数乘以86400,以便在1970-01-01 00:00:00之间以秒为单位获得时间,这在PHP中运行良好。

公式如下:

gmdate("Y-m-d H:i:s", ((3603612890/86400)-25569) * 86400));