微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用时区和星期几名称字符串格式化完整日期

如何解决用时区和星期几名称字符串格式化完整日期

我正在尝试使用 01:03:55.065 GMT Tue Mar 16 2021 从 NodeJS javascript 中的字符串 date-fns v2.21.3 创建一个日期对象,但我不介意使用常规的 javascript Date。

这是我的代码

const df = require('date-fns');

const setupTime = '01:03:55.065 GMT Tue Mar 16 2021';
const ret = df.parse(setupTime,'HH:mm:ss.SSS zzz EEE dd yyyy',Date.Now());
console.info(ret);

看起来可能 format()parse() 没有相同的格式字符串?

当我尝试执行此代码时,我得到:

RangeError: Format string contains an unescaped latin alphabet character `z`
    at Object.parse (/Volumes/osx-storage/projects/vocalix/parse-date-fns/node_modules/date-fns/parse/index.js:486:15)
    at Object.<anonymous> (/Volumes/osx-storage/projects/vocalix/parse-date-fns/index.js:4:16)
    at Module._compile (node:internal/modules/cjs/loader:1108:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10)
    at Module.load (node:internal/modules/cjs/loader:988:32)
    at Function.Module._load (node:internal/modules/cjs/loader:828:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
    at node:internal/main/run_main_module:17:47

现在..因为我收到的数据总是包含 GMT,我试图忽略时区并执行:

const ret = df.parse(setupTime,"HH:mm:ss.SSS 'GMT' EEE dd yyyy",Date.Now());

但这会产生输出 Invalid Date

date-fns-tz 包,但它不包含它自己的格式函数,所以这里不相关。

有什么想法可以解决这个问题吗?

谢谢

解决方法

也许这个简单的 JavaScript 解决方案会对您有所帮助?

const d = "01:03:55.065 GMT Tue Mar 16 2021";

function parseDate(s){
  const a = s.split(" ");
  return new Date([a[4],a[3],a[5],a[0]+"Z"].join(" "))
}

console.log(parseDate(d));

它与标准日期构造函数一起工作,接受一个字符串作为输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。