【发布时间】:2020-06-28 21:04:49
【问题描述】:
【问题讨论】:
标签: javascript date-fns
【问题讨论】:
标签: javascript date-fns
使用aaaaa'm':
format(new Date(), "YYYY-MM-DD hh:mm aaaaa'm'")
解释: @GollyJer 找到了一种非常聪明的方法来解决这个限制。根据the documentation,我们可以使用aaaaa 生成a(对于AM)或p(对于PM)。然后我们只用转义字符m 跟在它后面,即'm',产生am 或pm。
注意:如果您允许任何类型的区域切换,这可能会导致错误的输出,因为 AM 和 PM 可能因语言而异。
不过,对于这些版本,根据文档和源代码审查,没有 native¹ 方式来执行此操作,因为格式取决于源代码中显示的语言环境配置 (@987654322 @):
// AM or PM
a: function(date, token, localize) {
var hours = date.getUTCHours()
var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'
switch (token) {
case 'a':
case 'aa':
case 'aaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
})
// ...
1:原生,我的意思是一个简单的原生 API 格式化程序。
您可以add a new locale 自定义字符串。这意味着更改此特定部分(基于locale/en-US/_lib/localize/index.js):
var formattingDayPeriodValues = {
// ...
abbreviated: {
am: 'AM',
pm: 'PM',
// ...
}
// ...
}
很遗憾,这个新版本没有自定义默认语言环境的简单方法,甚至只是应用猴子补丁的简单方法。创建一个新的语言环境一点也不优雅,在调用format 之后手动将a.m. 替换为am 也不是。
对于这些版本,只需使用a 格式。示例:
console.log(dateFns.format(new Date(), 'YYYY-MM-DD hh:mm a'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
<!-- or: https://cdnjs.cloudflare.com/ajax/libs/date-fns/2.0.0-alpha0/date_fns.min.js -->
你可以自己检查in the source code它的工作方式:
var meridiemLowercase = [
'am',
'pm'
];
var formatters = {
// ...
'a': function (date) {
return date.getHours() / 12 >= 1 ? meridiemLowercase[1] : meridiemLowercase[0];
},
// ...
}
【讨论】:
a for am, aa for a.m. and A for AM etc... 编辑:我现在看到有一个 2.11.0 版本但在 CDN 上不可用,我会检查一下并回复您。
format(new Date(), "YYYY-MM-DD hh:mm aaaaa'm'")
【讨论】: