Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将php日期差异值转换为javascript整数?_Javascript_Php - Fatal编程技术网

如何将php日期差异值转换为javascript整数?

如何将php日期差异值转换为javascript整数?,javascript,php,Javascript,Php,我试图利用两个日期之间的差异来帮助我在HTML画布上画线。我在PHP中生成一个日期,并提取另一个日期,该日期存储在SQL数据库中 当我将所有内容都保存在PHP中时,echo的输出正是我所期望的。但是,当我对输出进行json_encode编码时(我希望它是一个整数),用于在画布上绘制我想要的形状时,会显示一个与javascript完全不同的数字 我很确定这与json编码有关。。。但是我还没有找到任何关于如何正确地做这件事的参考资料 以下是我用来获取、格式化和创建日期差异输出的PHP: $sdt =

我试图利用两个日期之间的差异来帮助我在
HTML
画布上画线。我在
PHP
中生成一个日期,并提取另一个日期,该日期存储在
SQL
数据库中

当我将所有内容都保存在
PHP
中时,echo的输出正是我所期望的。但是,当我对输出进行
json_encode
编码时(我希望它是一个整数),用于在
画布上绘制我想要的形状时,会显示一个与
javascript
完全不同的数字

我很确定这与
json
编码有关。。。但是我还没有找到任何关于如何正确地做这件事的参考资料

以下是我用来获取、格式化和创建日期差异输出的
PHP

$sdt = new DateTime($row['sdate']);
$today = new DateTime('now');

$sdiff = date_diff($sdt, $today);
$sdelta = $sdiff->format("%a");
如果我将所有这些都保存在
PHP
中,并且
echo
变量或
echo
json\u encode
变量中,我会得到预期的答案,即34

echo $sdelta;
结果34

echo json_encode($sdelta);
结果"34",

结果34例

echo json_decode($sdelta);
但是,当我将此值赋给
javascript
变量并测试赋值结果时:

var diffdt = <?php echo json_encode($sdelta); ?>;
alert(diffdt);
  • 行数为1
  • vardump结果为:字符串(10)“2019-09-27”
  • 必须使用“数字(您的号码)”方法我在这里使用的方法,请参见底线:

    <script type="text/javascript">
    
        // To set two dates to two variables 
        var date1 = new Date("06/30/2019"); 
        var date2 = new Date("07/30/2019");
    
        // To calculate the time difference of two dates 
        var Difference_In_Time = date2.getTime() - date1.getTime();
    
        // To calculate the no. of days between two dates 
        var Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24); 
    
        console.log(Number(Difference_In_Days));
    </script>
    
    
    //将两个日期设置为两个变量
    var日期1=新日期(“2019年6月30日”);
    var日期2=新日期(“2019年7月30日”);
    //计算两个日期的时差
    var Difference_In_Time=date2.getTime()-date1.getTime();
    //计算两个日期之间的天数
    var差额天数=差额时间/(1000*3600*24);
    console.log(数量(天数差异));
    
    airider74当您说PHP显示正确的数据,而JS不显示时,您使用什么来显示值——即控制台/终端/浏览器等?他们都使用UTF8吗?您可以尝试通过urlencode()对PHP的输出进行编码,然后通过decodeURI()在JS中对其进行解码

    PHP:

    JS:

    或者尝试base64编码

    PHP:

    JS:


    我想您的数据可能是服务器输出的ASCII码,但JS默认使用UTF8(从更一般的意义上讲,大多数现代浏览器也是如此)。

    最终解决了这个问题,将php代码移到了我编写的一些javascript之外。问题来自我实现的for循环,该循环更新了php循环中的javascript值。这就是结果的总和。我的代码实际上没有改变,只是重新排列了一下

    我不认为这是一个问题,因为for循环是按照它的设计工作的


    谢谢大家的帮助。它允许我消除大多数其他潜在问题。

    呈现的HTML页面源代码是什么样子的?Ie,使用浏览器的“查看页面源代码”选项,查看在
    var diffdt=…
    I无法重现此问题时插入的内容。如果我将该输出直接复制到浏览器控制台中,它会提醒预期值。您的示例使用的日期不是从SQL中提取的,我知道您不能在该页面的演示中这样做。当我使用这种“静态”方法时,我可以得到正确的结果。但是,当我从SQL server中提取日期时,PHP会正确显示结果,但Javascript不会。。。我很确定这是一个格式问题,但我还没有弄清楚我需要对格式做什么才能让它产生正确的结果。我尝试过使用PHP intval()函数,但没有效果。您检查过呈现的HTML/JS源代码了吗?您的数据库中的
    sdate
    值到底是多少?真正让我头疼的是,我正在运行一个单独的php文件来调试它,它给了我正确的答案。当我把代码复制过来时,奇怪的事情发生了。所以现在我必须弄清楚这“奇怪的东西”是什么。我根本看不出这和这个问题有什么关系。此外,答案中通过
    Number
    显式装箱是多余的,因为该值已经是从SQL server提取日期的数字。。。如果我只是手动分配日期,则不会出现此问题。。。这就是为什么我在JS中使用json编码,如果一个数字用引号括起来,它将被解释为字符串,因此不是数字数据类型。您可以使用TypeOf(object)来测试这一点;如果object=“34”,则返回字符串,而如果objecg=34,则返回数字。Number(object)强制JS将字符串中的数字解释为数字类型。i、 数字('34')将返回34(一个数字),而不是“34”(一个字符串)。不管数据来自哪里,但是它所呈现的格式将促使解释器将其视为一种特定的数据类型,除非你另外告诉它。Phil,在这个例子中,你对冗余是正确的——但是,如果应用于这个问题,它是正确和有效的,因为上面所述的原因。原因是“数字”用引号表示,因此表示字符串。Number(object)将返回存储在字符串类型中的Number对象类型。区别在于字符串是由一个序列字符组成的代码。数字不是。他们被区别对待。i、 e.“3”+“4”返回“34”;3+4返回7。字符串加法连接多个字符串。数字加法用数学方法将多个数字相加。
    echo urlencode(dIffdt);
    
    var diffdt = "37";  alert( decodeURI(diffdt) );
    
    echo base64_encode(diffdt);
    
    var diffdt = "37";  alert( btoa(diffdt) );