【问题标题】:JavaScript to PHP timestamp failing, adds about a month and a half to the timeJavaScript 到 PHP 时间戳失败,增加了大约一个半月的时间
【发布时间】:2012-08-27 04:47:04
【问题描述】:

好的,我正在尝试将 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 Date reference,使用它们描述的 0-nn。上午/下午 if-else 本质上意味着将所选时间增加 12 小时,因为网站上显示的时间是 12 小时格式。 Javascript 使用 24 小时制。如果选择 am 并使用 12,它也会将 12 转换为 0 以匹配 24 小时格式概念。

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

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

【问题讨论】:

    标签: php javascript jquery datetime timestamp


    【解决方案1】:

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

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

    或者更好的是,生成 &lt;option&gt;s,其值范围为 0 到 11。

    另外,这个声明:

    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 编码技能。)

    【讨论】:

    • 您能否详细说明改进的空间?因为尽管没有通过这个例子来展示它,也许还有一些我在堆栈上及时完成的​​。我确实练习缓存,并且倾向于拥有更具可读性的代码库。但你不会知道,只是假设。如果您认识我,那么您会意识到这只是我在自己的沙盒中玩,并且由于这不是协作的努力,我倾向于不在乎,因为通常重要的是我可以在这种情况下阅读它。当然是我在发布之前没有清理它的错,但不要仅仅以此来判断。
    • 无论如何,关于 sting vs number 的好电话,我完全跳过了。第一次真正在 Javascript 中玩日期,因为我通常将事情传递给处理它们的服务器端方法。
    • @chris 我以为您是 Javascript 初学者,因为:1) 不需要 :selected 部分来获得 &lt;select&gt; 值; 2)知道Date中的月份从0开始是相当基础的知识; 3) 使用相同选择器的多个 jQuery 调用; 4) html() 不需要转换为字符串(或者,如果您只是想添加一个空格,则无论如何都不会呈现); 5) 添加 12 的问题也是一个非常基本的 Javascript 警告(在 PHP 中,加号只是一个数字运算符)。如果您实际上是 Javascript 大师,请原谅我,但为了其他用户的利益,请发布更多可读的代码。
    猜你喜欢
    • 2018-04-05
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多