[英]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
显变量或echo
显json_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']);
必须使用我在这里使用的“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.