【问题标题】:hours, minutes seconds separation showing as underscore instead of colon小时、分钟、秒分隔显示为下划线而不是冒号
【发布时间】:2023-04-02 03:27:01
【问题描述】:

我正在使用 moment.js 来获取当前日期和时间,并尝试将其格式化为以下格式

'MMMM Do YYYY, h:mm:ss a'

但这里的问题是小时、分钟和秒之间的分隔显示为下划线而不是冒号。这就是我的实现方式。

download() {
  var url = OFFERS_URL + '?';
  this.$axios.get(url, responseType: 'blob' })
  .then(response => {
    var file = new Blob([response.data]);
    FileSaver.saveAs(file, 'Offers ' + moment().format('MMMM Do YYYY, h:mm:ss a') + '.xls');
  });
}

下载的文件名显示为

Offers April 20th 2021, 1_26_59 PM 

但应该是的

Offers April 20th 2021, 1:26:59 PM

【问题讨论】:

  • 您使用的是什么操作系统?在黑暗中刺伤,但如果你在 windows 或 mac 上,文件名中不允许使用冒号,因此 FileSaver 可能会删除带有有效字符的那些。
  • @Phix 你能建议以任何其他格式显示时间的最佳方式吗?
  • @user12763413 包含下划线有什么问题?
  • 是的,不要使用无效字符。用下划线代替冒号并不是什么大问题

标签: javascript vue.js date time momentjs


【解决方案1】:

您可以将此格式用于文件名的日期部分:

moment().format('DD-YYYY-MM_hh-mm-ss-a')

根据 IBM 的 OS 文件命名约定(参见参考资料 https://www.ibm.com/docs/en/aix/7.1?topic=files-file-naming-conventions

每个文件的名称在存储它的目录中必须是唯一的。这可确保该文件在文件系统中也具有唯一的路径名。

文件命名准则是:

  • 文件名最长可达 255 个字符,并且可以包含字母, 数字和下划线。
  • 操作系统区分大小写,这意味着它区分 文件名中的大写和小写字母之间。所以, FILEA、FiLea 和 filea 是三个不同的文件名,即使它们 驻留在同一目录中。
  • 文件名应尽可能具有描述性和意义。
  • 目录遵循与文件相同的命名约定。
  • 某些字符对操作系统具有特殊意义。 命名文件时避免使用这些字符。

这些字符包括:

/ \ " ' * ; - ? [ ] ( ) ~ ! $ { } &lt > # @ & | space tab newline

【讨论】:

  • 我同意您建议的文件名是一个不错的选择,但是您引用的文件命名约定来自 IBM AIX,并没有提及 which 文件系统(例如 ext3、zfs , ext4) 这通常比运行哪个操作系统更重要。 OP 没有提及操作系统或文件系统,但如果不允许使用冒号,则可能是 Mac 或 Windows 设置; *nix 系统大多允许文件名中的冒号。
  • 通常你不应该在文件名中使用一些特殊字符,包括 :。如果您曾经在大多数 unix 系统上进行过大规模文件重命名,您应该意识到这一点。一些特殊字符必须转义,这不会使文件重命名过程变得容易。此外,系统之间的文件可移植性也可能成为一个大问题。
【解决方案2】:

您可以根据需要使用此格式作为文件名

const today_date = moment().format('MMMM Do YYYY, h_mm_ss A');
console.log("Offers "+ today_date +".xls");

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2015-10-15
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多