【问题标题】:Format longDateFormat in Moment.js在 Moment.js 中格式化 longDateFormat
【发布时间】:2016-07-05 21:54:34
【问题描述】:

我之前问过一个关于通过 Moment.js meridiem 函数格式化 AM/PM 的问题。顺便说一句,我使用的是 2.9 版

我成功地在 AM/PM 输入中添加句点并使用 this 应用小写

moment.locale('en', {
    meridiem: function(hour, minute, isLower) {
       if (hour < 12) {
          return isLower ? 'a.m.' : 'A.M.';
       } else {
          return isLower ? 'p.m' : 'P.M.';
       }
    }
});

现在我遇到了一个问题,我需要对longDateFormat 字符串进行相同类型的格式化。

字符串为"h:mm:ss a",返回的时间为当前时间,但带有大写AM/PM

我需要返回当前时间,但输入的格式应为 a.m.下午

在文档 longDateFormat 是一个对象而不是函数的那一刻,我将如何在这里格式化子午线?

************************编辑******************

这是我的问题的一个例子。

meridiem 设置与 h a z 输入配合良好。它是小写的,有句号。

meridiem 设置不影响 longDateFormat 字符串。 am/pm 总是大写的,没有句点。无论我是否更改最初应用的 meridiem 设置。我该如何更改?

HTML

{{last_update|date:"MMMM d, y 'at' h:mm:ss a"}}.

结果

Last updated on July 6, 2016 at 8:25:00 AM.

谢谢

【问题讨论】:

  • 答案在你之前的问题中:)。如果您使用the accepted answer,您将始终使用小写a.m./p.m.。如果您使用my answer,您将知道a.m./p.m. 大小写(取决于aA 的格式)。如果您在格式中指定 a,则您的 sn-p 返回 AM/PM,如果您设置 A(反转默认逻辑),则返回 a.m./p.m.
  • 嗨@VincenzoC 我没有关注你。即使设置了 meridiem,longDateFormat 也不正确。 longDateFormat a 返回一个大写的 AM PM,没有句点
  • 如果您删除 meridiem 自定义会发生什么?在我看来,由于 meridiem 函数中的三元运算符,您得到了大写的 AM/PM。当格式包含小写a时,isLowerCasetrue,而当你有大写A时,isLowerCasefalse。删除 isLowerCase 检查应该可以解决您的问题。也许您可以添加一个重现您的问题的 sn-p 以进一步澄清您的问题。
  • @VincenzoC 我更新了问题并发布了几张图片
  • 抱歉我看不到图片,可能是上传时出了点问题。无论如何,您的问题的代码示例比屏幕截图要好得多。

标签: javascript angularjs datetime momentjs


【解决方案1】:

由于您使用的是 Angular,因此您必须使用 angular-moment 来利用指令和过滤器中的时刻。

angular-moment 提供了一个amDateFormat 过滤器,使用 moment.js format() 方法格式化日期,正如文档所说。 下面的代码可以帮助你得到你想要的:

angular.module('MyApp',['angularMoment'])
.run(function(){
  moment.locale('en', {
    meridiem: function(hour, minute, isLower) {
      if (hour < 12) {
         return isLower ? 'a.m.' : 'A.M.';
      } else {
         return isLower ? 'p.m.' : 'P.M.';
      }
    }
  });
})
.controller('AppCtrl', function($scope) {
  $scope.last_update = new Date();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/0.10.3/angular-moment.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  With angular default date filter: <br/>
  {{last_update|date:"MMMM d, y 'at' h:mm:ss a"}}
  <br/>
  With angular-moment date filter: <br/>
  {{last_update|amDateFormat:'dddd, MMMM Do YYYY, h:mm:ss a'}}
  
</div>

在您的示例中,您使用的是默认角度 date filter

【讨论】:

  • 非常感谢 Vincenzo,正如您回复的那样,我意识到我使用的是 angulars 日期格式。角力矩是一个很好的解决方案。感谢您的帮助!
猜你喜欢
  • 2016-02-10
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2020-01-16
  • 1970-01-01
相关资源
最近更新 更多