繁体   English   中英

如何将 php date_diff 值转换为 javascript integer?

[英]How do I convert a php date_diff value to a javascript integer?

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

当我将所有内容保存在PHP中时,回显的 output 正是我所期望的。 However, when I json_encode the output, which I expect to be an integer, to use to draw the shape I want on the canvas , a completely different number is presented from javascript .

我很确定它与json编码有关......但我无法找到有关如何正确执行此操作的任何参考。

这是我用来抓取、格式化和创建日期差异 output 的PHP

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

$sdiff = date_diff($sdt, $today);
$sdelta = $sdiff->format("%a");

如果我将所有这些都保存在PHP中并echo显变量或echojson_encode变量,我会得到预期的答案,即 34。

echo $sdelta;

结果 34

echo json_encode($sdelta);

结果为“34”;

echo json_decode($sdelta);

结果为34;

但是,当我将此值分配给javascript变量并测试分配结果时:

var diffdt = <?php echo json_encode($sdelta); ?>;
alert(diffdt);

alert弹出窗口显示 199。

如果有人可以帮助我解决这个问题,我将永远感激不尽。


额外的信息...

  • sdate的列类型是DATE
  • 我正在执行的查询是获取数据是:

     $stmt = $link->prepare("SELECT * FROM register WHERE id =? "); $stmt->bind_param("i", $id); $stmt->execute(); $result = $stmt->get_result(); $num = $result->num_rows; $row = $result->fetch_assoc(); var_dump($row['sdate']);
  • 行数为 1。
  • vardump 结果为:字符串(10)“2019-09-27”

必须使用我在这里使用的“Number(your_number)”方法,见底线:

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

最后通过将 php 代码移到我编写的一些 javascript 之外来解决这个问题。 问题来自我已经实现的 for 循环,该循环从 php 循环中更新了 javascript 值。 这是把结果加起来。 我的代码实际上都没有改变,只是重新排列了。

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

感谢大家的帮助。 它使我能够消除大多数其他潜在问题。

airider74 当您说 PHP 显示正确的数据但 JS 没有显示时,您使用什么来显示值 - 即控制台/终端/浏览器等? 他们都使用UTF8吗? 您可能会尝试通过 urlencode() 从 PHP 对 output 进行编码,然后通过 decodeURI() 在 JS 中对其进行解码。

PHP:

echo urlencode(dIffdt);

JS:

var diffdt = "37";  alert( decodeURI(diffdt) );

或者尝试 base64 编码。

PHP:

echo base64_encode(diffdt);

JS:

var diffdt = "37";  alert( btoa(diffdt) );

我在想你的数据可能是来自服务器的 ASCII,但 JS 默认使用 UTF8(就像大多数现代浏览器一样)。

您需要设置没有 json_encode 的变量,所以它是:

var diffdt = <?php echo $sdelta; ?>;
alert(diffdt);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM