【问题标题】:Date/Time format issue with ChromeChrome 的日期/时间格式问题
【发布时间】:2012-10-08 15:01:20
【问题描述】:

我在 JSON 中得到如下日期/时间值:

"ChangedDate":"\/Date(1349469145000)\/"

在 FF 和 IE 中,我使用下面的辅助函数以 12 小时格式(10/5/2012 - 3:32:25 PM)获得上述日期:

Handlebars.registerHelper('FormatDate', function (date) {
            if (date == null)
                return "";
            else {
                var value = new Date(parseInt(date.substr(6)));
                return value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear() + " - " + value.toLocaleTimeString();
            }
        });

但是,在 Chrome 中,我仍然获得 24 小时格式(2012 年 10 月 5 日 - 15:32:25)。

如何在 Chrome 中获取 12 小时格式的日期/时间值?

【问题讨论】:

    标签: javascript jquery google-chrome handlebars.js


    【解决方案1】:

    当意图向用户显示一个 使用用户选择的区域格式格式化的字符串。是 意识到这种方法,由于其性质,表现不同 取决于操作系统和用户的设置。

    你最好改变这一行:

    return value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear() + " - " + value.toLocaleTimeString();
    

    到:

    return value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear() + " - " + (value.getHours() > 12 ? value.getHours() - 12 : value.getHours()) + ":" + value.getMinutes() + ":" + value.getSeconds();
    

    我们检查小时数是否为> 12,如果是,我们从该数字中减去 12。

    (value.getHours() > 12 ? value.getHours() - 12 : value.getHours())
    

    所以您的示例 15:32:25 将是 15 - 12 = 33:32:25

    https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getSeconds

    https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMinutes

    https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getHours

    编辑

    //set up example
    var date = new Date("10/5/2012");
    date.setHours(15,32,25,00);
    
    //Get data from date
    var month = date.getMonth()+1;
    var day = date.getDate();
    var year = date.getFullYear();
    
    var hours = date.getHours();
    var amOrPm = "AM";
    if(date.getHours() > 12){
        hours = date.getHours() - 12;
        amOrPm = "PM";
    }
    
    var minutes = date.getMinutes();
    if(minutes  < 10)
        minutes = "0" + minutes;
    
    var seconds = date.getSeconds();
    if(seconds < 10)
        seconds = "0" + seconds;
    
    var dateString = month + "/" + day + "/" + year + " - " + hours + ":" + minutes + ":" + seconds;
    
    console.log(dateString);
    

    我使这个示例比需要的更详细一些,但它有助于向您展示发生了什么。希望对您有所帮助。

    EXAMPLE

    浓缩后看起来像这样:

    //Get data from date
    var dateString = (date.getMonth()+1) + "/" + date.getDate() + "/" +  date.getFullYear() + " - " + (date.getHours() > 12 ? date.getHours() - 12 : date.getHours())+ ":" + (date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) + ":" + (date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()) + " " + (date.getHours() > 12 ? "PM" : "AM");
    

    EXAMPLE

    【讨论】:

    • 谢谢。但是,如何添加 am/pm 值并以两位数格式显示值(01 代替 1 分钟)?
    • 我会在这里做一个 js fiddle 给你看,但它与上面的概念基本相同。您将检查分钟是否少于 10 分钟,如果是,则预先挂起 0。上午/下午取决于时间,所以如果是&gt; 12,则为下午,否则为上午。
    • 让我知道这是否是您正在寻找的东西,如果不是,我将非常乐意为您提供更多帮助。谢谢
    • 感谢您的帮助。我有一个处理小时值 12 if (hours == 12) { hours = 12 + (hours % 12); 的条件。 amOrPm = "下午"; }
    • 除此之外,它是完美的,正是我想要的。
    猜你喜欢
    • 2020-10-26
    • 2021-12-19
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多