【问题标题】:Time Conversion between VBScript and PHPVBScript 和 PHP 之间的时间转换
【发布时间】:2014-03-10 16:03:55
【问题描述】:

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

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

如何在 PHP 中将此数字“3603612890”转换为等于该值“2014/03/10 11:35:15”

谢谢

【问题讨论】:

    标签: php vbscript


    【解决方案1】:

    试试这个:

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

    要转换成另一种方式,你想要strtotime()

    【讨论】:

    • 我试过了 gmdate 但返回的值是 '2084-03-11 06:34:50',70 多年后。我期望看到的是更接近'2014/03/10 11:35:15'
    • 是否始终保持相同的价值差异?如果它是相同的,你总是可以做数学来消除差异。计算差异并显示它,看看它是否保持不变。
    • 它似乎与所有值一致,我可能会尝试锻炼差异,但我需要这些值精确到秒。我宁愿排除任何猜测。
    • 取一个已知日期并计算出值。应该很简单。
    【解决方案2】:

    使用 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 纪元基数并计算秒数后,PHP 的默认 date() 函数默认转换为 unix 纪元。因此,通过添加额外的 timezone_set,您可以获得从 vbs 转换为 php 的确切时间。

    【讨论】:

    • 目前我无法更改此日期的存储方式,这目前已投入生产多年,现在更改它会使以前的所有数据失效。
    【解决方案3】:

    现有 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

    【讨论】:

      【解决方案4】:

      感谢所有分享意见的人。

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

      首先您必须撤消Now()*24*60*60 并返回原始VBScript 日期值41708.48252314815 然后在VBScript 中有这个神奇的数字,一些基本日期常数,等于25569,您从上面的数字中减去然后相乘从 1970-01-01 00:00:00 开始,总计 86400 以秒为单位计算,这在 PHP 中运行良好。

      公式如下:

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

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 2020-03-05
        • 1970-01-01
        • 2011-07-27
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 1970-01-01
        相关资源
        最近更新 更多