调整JavaScript日期和时间

3
我找到了一个脚本,可以显示不同时区的当前日期和时间。但是我无法更改其格式。目前它显示为MM/DD/YYYY HH:MM:SS AM/PM,而我想要它只显示为HH:MM AM/PM 我对jQuery比纯JavaScript更熟练,但这让我困扰:
$(document).ready(function() {
    function calcTime(offset) {
        currentDate = new Date();
        utc = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000);
        newDate = new Date(utc + (3600000*offset));
        return newDate.toLocaleString();
    }
    function displayTimes() {
        $("#chicago").html(calcTime("-6"));
        $("#london").html(calcTime("+1"));
        $("#shanghai").html(calcTime("+8"));
    };
    window.setInterval(displayTimes, 1000);
});

那个答案对我不起作用,所以它不是重复的。 - JacobTheDev
只需编辑您的 newDate.toLocaleString() 函数,并在其中创建一个字符串,从 http://www.w3schools.com/jsref/jsref_obj_date.asp 中获取相关部分。 - Sudipta Chatterjee
你能给我一个代码示例吗?我检查了URL,但我不明白你的意思。 - JacobTheDev
2个回答

2
罪魁祸首是以下代码行。
    return newDate.toLocaleString();

具体来说,toLocaleString()方法是一个与日期和时间相关的JavaScript全局对象。您可以在此处了解有关该行代码的更多信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleDateString。如果您想快速使用,请使用.toTimeString()。但是,如果您希望按照自己的方式打印输出,而不是返回newDate.toLocaleString()或.toTimeString(),则需要进行相应设置。例如:
    return newDate.getHours() + ':' newDate.getMinutes();

这将给你军事时间。

如果您想要am/pm显示,这可以为您完成。

(newDate.getHours() >  11) ? 'pm' : 'am'

如果你想要时间更加美观,0代表午夜12点,12代表中午12点。如果小时数大于12,你可以减去12。如果是0,你也可以将其设置为12来显示。所有这些可以像这样完成:
 (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours());

一定要使用var来定义newDate.getHours()。说到var...

请按以下格式重新排列你的变量: var currentDate = new Date(), utc = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000), newDate = new Date(utc + (3600000*offset));

希望这有所帮助。

编辑:现在全部替换为:

return newDate.toLocaleString();

以下是相关的内容:

return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + newDate.getMinutes() + ' ' + (newDate.getHours() >  11) ? 'pm' : 'am';

这段代码写得比较草率和潦草,但如果你使用var来获取newDate.getHours(),它会更容易读懂。

谢谢。


这个代码可以正常工作: return newDate.getHours() + ':' + newDate.getMinutes(); 但是在尝试将其转换为上午/下午时间后,所有时间都显示为“12”。 - JacobTheDev
给你,抱歉关于“12”的问题...(newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours())我也会更新上面的内容。 - shubniggurath
1
需要稍微调整一下,但现在它可以工作了。谢谢。return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + newDate.getMinutes() + ' ' + ((newDate.getHours() > 11) ? 'PM' : 'AM'); - JacobTheDev
很高兴你已经解决了它。 - shubniggurath

-2

这给了我一个错误:Uncaught TypeError: Object Thu Jan 31 2013 14:18:54 GMT-0600 (Central Standard Time) has no method 'format' - JacobTheDev
我也是。你可以在这里将来检查你的代码:http://repl.it/languages/JavaScript - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接