如何将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) );