4

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

这是我迄今为止的一次尝试失败。请注意我使用的是 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 描述。am/pm if-else 本质上是为了在所选时间上增加 12 小时,因为网站上显示的时间是 12 小时格式。Javascript 使用 24 小时制。如果选择 am 并使用 12,它也会将 12 转换为 0 以匹配 24 小时格式概念。

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

我会创建一个包含整个 html 的 jsFiddle,但我使用 php 来生成我的选择框。因此,如果您想查看我的“实时”内容,请访问http://7pz.net/timestamps.php,因为这就是我正在测试这个概念的地方。

4

1 回答 1

2

这是因为在 Javascript 的Date对象中,月份范围是 0-11,而不是 1-12。这是“月”部分。试试这个:

var mn = j('#time_month :selected').val() - 1; //month

或者更好的是,生成<option>值从 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;

我使用了加一元运算符

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

于 2012-09-01T20:28:10.757 回答