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

JavaScript到PHP的时间戳失败,增加了大约一个半月的时间,php,javascript,jquery,datetime,timestamp,Php,Javascript,Jquery,Datetime,Timestamp,好的,我正在尝试将javascript时间戳转换为php等价物,我已经在stack和其他网站上浏览了这里的帖子,以获得一个合适的答案,所以这个问题是我最后的努力,尽管我知道我可能会获得选票,但有人告诉我,这只是一个来自其他地方的重复问题。所以尽管如此 这是我迄今为止一次尝试的失败。请注意,我使用的是jQuery,没有冲突,因此是j而不是$ 顶部的选择值基于使用0-nn(如它们所述)。其中,作为am/pm if else,本质上意味着在所选时间的基础上增加12小时,因为站点上显示的时间是12小时格

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

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

顶部的选择值基于使用0-nn(如它们所述)。其中,作为am/pm if else,本质上意味着在所选时间的基础上增加12小时,因为站点上显示的时间是12小时格式。Javascript使用24小时服务。如果选择am并使用12,它也会将12转换为0,以匹配24小时格式概念

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


我将创建一个包含html的JSFIDLE,但我使用php生成我的选择框。因此,如果您想查看我的live,请转到我正在测试概念的地方。

这是因为在Javascript的日期对象中,月份范围是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;
我用了这个


注意:从可读性和jQuery对象缓存开始,代码还有很大的改进空间。在习惯一些不好的做法之前,请花些时间改进Javascript编码技能。

您能详细说明改进的空间吗?因为尽管没有通过这个例子来展示它,也许还有一些我在堆栈上及时完成的其他例子。我确实练习缓存,并且倾向于拥有更可读的代码库。但你不会知道,只是假设一下。如果你认识我,你就会意识到这只是我在自己的沙箱里玩的游戏,因为这不是一个合作的努力,所以我不在乎,因为通常重要的是我能在这种情况下阅读它。当然这是我的错,没有在发布前清理它,但不要仅凭这一点来判断。不管怎样,在sting vs number这篇文章上打了一个漂亮的电话,我完全跳过了这一点。第一次真正在Javascript中玩日期,因为我通常会将日期传递给服务器端的处理方法。@chris我认为你是Javascript初学者,因为:1:所选部分不需要获取值;2知道从0开始的月份是相当基本的知识;3使用具有相同选择器的多个jQuery调用;4转换为字符串对于html来说是不必要的,或者,如果您只是想添加一个空间,那么无论如何也不会呈现该空间;5在PHP中,添加12的问题也是一个非常基本的Javascript警告,加上仅仅是一个数字运算符。如果你真的是Javascript大师,请原谅我,但为了其他用户的缘故,请发布更可读的代码。
hr = +j('#time_hour :selected').val() + 12;