JavaScript到PHP的时间戳失败,增加了大约一个半月的时间

JavaScript to PHP timestamp failing, adds about a month and a half to the time

本文关键字:一个 时间 半月 时间戳 PHP 失败 JavaScript 增加      更新时间:2023-09-26

好的,我正在尝试将javascript时间戳转换为php等效时间戳,我已经在stack上浏览了这里的帖子,以获得一个不错的答案,以及其他各种网站,所以这个问题是最后的努力,尽管我知道我可能会获得选票,但有人告诉我,这只是一个来自其他地方的欺骗问题。所以尽管如此。。

这是我迄今为止尝试的失败。请注意,我使用的是jQuery,没有冲突,因此是j而不是$

var yr = j('#time_year :selected').val();//year
var mn = j('#time_month :selected').val();//month
var dy = j('#time_day :selected').val();//day
var hr = j('#time_hour :selected').val();//hour
var min = j('#time_minute :selected').val();//minute
var sc = j('#time_second :selected').val();//second
if(j('#time_ampm :selected').val() == 12 && j('#time_hour :selected').val() < 12){hr = j('#time_hour :selected').val()+12;}
if(j('#time_ampm :selected').val() == 0 && j('#time_hour :selected').val() == 12){hr = 0;}
var theDate = new Date(yr, mn, dy, hr, min, sc).getTime();
setTimeStamps(theDate);
j('#timestamp_now_js').html(" "+theTime);
j('#timestamp_now_php').html(" "+Math.round(theTime / 1000));

顶部的选择值基于Mozilla.org日期参考,使用0-nn进行描述。作为上午/下午,if else本质上是指在选择的时间上增加12小时,因为网站上显示的时间是12小时格式。Javascript使用24小时。如果选择am并使用12,它也会将12转换为0,以匹配24小时格式的概念。

目前似乎正在发生的事情是,尽管它看起来很有效,但当我运行通过php date()函数给出的时间戳时,它显示的日期大约是一个月2周零几天,这是我正在测试的,相当于现在的

我会创建一个包含html的jsFiddle,但我使用php来生成我的选择框。因此,如果你想看看我"活"了什么,那就去http://7pz.net/timestamps.php因为这就是我测试这个概念的地方。

这是因为在Javascript的Date对象中,月份范围是0-11,而不是1-12。这是"月份"的部分。试试这个:
var mn = j('#time_month :selected').val() - 1; //month

或者更好的是,生成值范围从0到11的<option> s。

另外,这个声明:

hr = j('#time_hour :selected').val()+12;

请记住,j('#time_hour :selected').val()字符串,而不是数字,因此必须在添加12之前对其进行转换,否则会得到类似"0412"的内容。您正在创建一个小时计数设置为412的日期,即17天4小时。17天是天数的加法。

这样修复:

hr = +j('#time_hour :selected').val() + 12;

我使用了加号一元运算符。

(附言:从可读性和jQuery对象缓存开始,代码还有很大的改进空间。在习惯一些糟糕的做法之前,需要花一些时间来提高你的Javascript编码技能。)