【问题标题】:Get time in 24 hrs format and hold it in any variable using Javascript AngularJS以 24 小时格式获取时间并使用 Javascript AngularJS 将其保存在任何变量中
【发布时间】:2015-10-28 07:15:16
【问题描述】:

我正在用 Javascript 创建一个时间段。请不要使用 jQuery。如果你把第一次和最后一次,那么它会列出一个区间,在12个数字之后,它会变成上午到下午。假设,如果你的开始时间是 11,结束时间是 19,那么它会像这样创建一个 slot,

    11AM-12PM
    12PM-1PM
    1PM-2PM
    2pm-3pm
    3pm-4pm
    4pm-5pm
    5pm-6pm
    6pm-7pm

但是,问题是我把它当作简单的整数并给出 for 循环。我想保留它的 24 小时格式,比如 for

    1PM-2PM

它应该在任何将发送到服务器的变量中取这个值

    13:00:00 - 14:00:00

这是我的 JS 代码。

getTimeValues: function() {
                        console.log('here i am');
                        var timeValues = this.timeValues;
                        var minTime = 11; //vary this to change the first 
                        var maxTime = 19; //vary this to chage the
                        var string;
                        for (var i = minTime; i < maxTime; i++) {
                                if(i<12) {
                                        lowersuffix = 'AM';
                                        startRange = i;
                                        }
                                        else if(i===12){
                                                lowersuffix = 'PM';
                                                startRange = i;
                                        }
                                        else {
                                                lowersuffix = 'PM';
                                                startRange = i - 12;
                                        }
                                if((i+1)<12) {
                                        uppersuffix = 'AM';
                                        endRange = (i+1);
                                        }
                                        else if((i+1)===12){
                                                uppersuffix = 'PM';
                                                endRange = (i+1);
                                        }
                                        else {
                                                uppersuffix = 'PM';
                                                endRange = (i+1) - 12;
                                        }
                                string = startRange + lowersuffix + '-' + endRange + uppersuffix;
                                console.log(string);
                                timeValues.push(string);
                        };
                },

【问题讨论】:

  • 你考虑过使用momentjs吗?它内置了用于格式化 momentjs.com/docs/#/displaying/format 的标记
  • 如果你想要 24 小时格式,为什么要使用 am/pm 格式?
  • 如果您将代码重构为函数声明会更好。
  • @Michael,我认为他只是将代码复制到某个地方,现在正在寻求帮助以更改它
  • 不,它应该在前端显示为 12 小时格式。但我以 24 小时格式向服务器发送数据。所以,我需要一个可以存储 24 小时格式的变量。

标签: javascript html angularjs


【解决方案1】:

你在找这个吗?

 for (var i = minTime; i < maxTime; i++) {
      string = i + ':00:00 - ' + (i+1) + ':00:00';
      console.log(string);
      timeValues.push(string);
 };

【讨论】:

  • 是的。但它应该在前端显示为下午 1 点到下午 2 点。但我以 24 小时格式向服务器发送数据。
  • 嗯,我真的不知道您要做什么。您想显示上午/下午或 24Hrs 格式吗?您发送到服务器的格式从来都不是问题的一部分。
  • 我展示的是下午 1 点到 2 点。这可以。但我想在 24 小时内以某种方式在任何变量中保存它的值。
【解决方案2】:

您似乎正在使用一个简单的函数来将上午/下午格式的时间转换为 24 小时格式。以下应该可以完成这项工作,希望 cmets 就足够了。如果没有,请询​​问。

/*  @param {string} time - time string in hh:mm:ss am/pm format
**                       - missing time parts are treated as 0
**  @returns {string} time in 24hr format: hh:mm:ss
**/
function to24hrTime(time) {

    // Get the digits from the string
    var b = time.match(/\d+/g);

    // Test whether it's am or pm, default to am
    var pm = /pm$/i.test(time);
    var h, m, s;

    // If no digits were found, return undefined
    if (!b) return;

    // Otherwise, convert the hours part to 24hr and two digits
    h = ('0' + ((pm? 12:0) + (b[0]%12))).slice(-2);

    // Convert minutes part to two digits or 00 if missing
    m = ('0' + (b[1] || 0)).slice(-2);

    // Convert seconds part to two digits or 00 if missing
    s = ('0' + (b[2] || 0)).slice(-2);

    // Return formatted string
    return h + ':' + m + ':' + s;
}

document.write(
  to24hrTime('3:15pm') + '<br>' +
  to24hrTime('3:15am') + '<br>' +
  to24hrTime('11am') + '<br>' +
  to24hrTime('11pm') + '<br>' +
  to24hrTime('12AM') + '<br>' +
  to24hrTime('12PM') + '<br>' +
  to24hrTime('11 pm') + '<br>' +
  to24hrTime('12 AM') + '<br>' +
  to24hrTime('12 PM')
);

【讨论】:

  • 我在 html 中使用 ng-repeat。请检查此 plunker 代码。我想将这种 12 小时格式的服务器发送回 24 小时格式。但是,从前端它应该显示 12 小时格式。 plnkr.co/edit/heFVMH20QwzDFIcLcQTi?p=preview选择日期后会显示时间段。
  • 在 HTML 中,我正在使用 timeValues 中的时间。因此,如果我将时间更改为 24 小时,那么它将以 24 小时的形式进入服务器,但前端视图也会更改。
  • 上面显示了如何将 12 小时时间转换为 24 小时时间,因此您显示 12 小时,转换为 24 小时,然后发送到服务器。它旨在作为一个示例,您应该根据自己的情况进行调整。
  • 您好,我已经使用您的代码解决了。但是,如果我选择 1PM-2PM,那么它会以 UTC 格式显示 13:02:00 。那是因为插槽。如果我只想在 UTC 中获得第一个,那么有什么建议吗?比如,如果您选择 1PM-2PM,那么在 UTC 中它只会显示 13:00:00,即第一个。
  • @cyberoy — 我添加了更多示例,“11am”和“11 am”以及“11AM”和“11 AM”都变成了 11:00:00。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多