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

好吧,我试图将一个
javascript时间戳转换为一个
PHP等价物,我已经在堆栈上浏览了一个体面的答案以及各种其他网站,所以这个问题作为最后的努力,尽管知道我可能会得到投票,有人告诉我的不过是这是来自其他地方的一个骗局问题.尽管如此……

到目前为止,这是我失败的尝试.请注意我使用jQuery,noConflict因此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 Date reference,使用0-nn描述.其中am / pm if-else实际上是指在所选时间增加12小时,因为网站上显示的时间是12小时格式. Javascript使用24小时.它也在那里,如果我被选中并且使用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的 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;

我使用了plus unary operator.

(P.S.:从可读性和jQuery对象缓存开始,有很多改进代码的空间.在习惯一些不好的做法之前,花点时间提高你的Javascript编码技能.)

点赞