【问题标题】:Converting time stamp using regex使用正则表达式转换时间戳
【发布时间】:2018-03-13 07:26:19
【问题描述】:

我有一个从 UTC 到本地的转换时间戳,如下所示

2018-02-03T06:30:00.000Z。我只需要从响应中显示 06:30。我尝试使用正则表达式,但没有运气。有什么解决方案可以转换它吗?

【问题讨论】:

  • 你是如何转换的?
  • 我厌倦了获得 T 和前 Z 之后的值,但没有运气。
  • 向我们展示您的命令,然后我们可以更正它。
  • 不必害臊。

标签: javascript regex date


【解决方案1】:

这里不需要regex。您可以像这样使用自己的自定义逻辑:

var timeSt = '2018-02-03T06:30:00.000Z'
//split it using 'T' and get the second value of array
var arr = timeSt.split('T')[1];
//get the substring
var res = arr.substr(0,5);
console.log(res);

【讨论】:

  • 为什么不用split,为什么不用timeSt.substr(11,5)
【解决方案2】:

正则表达式是错误的工具。您应该将字符串转换为日期并调用getUTCHoursgetUTCMinutes 以获得正确的输出。

var date = new Date("2018-02-03T06:30:00.000Z");
console.log(date.getUTCHours() + ":" + date.getUTCMinutes());

带格式:

var date = new Date("2018-02-03T06:30:00.000Z");
console.log(('0' + date.getUTCHours()).slice(-2) + ":" +  ('0' + date.getUTCMinutes()).slice(-2));

【讨论】:

  • 你不会用这种方法得到06:30。 OP需要06:30
  • @GerardH.Pille 这只是为了格式化 Ankit 想要的输出,最初它很简单。
  • 来吧,一定有日期方法可以立即给你“06:30”。
  • 这仍然是一个强有力的解决方案
  • @RobG substr 可能更有效,但上述方法并非不合逻辑。增加时间戳怎么样?你还会依赖substr 并创建自己的类和方法吗?如果您同意创建自己的逻辑,那将是不合逻辑的
【解决方案3】:

我同意这里的其他回答者。正则表达式是不必要的,但既然您要求它,您可以捕获并用捕获组替换您的字符串$1

(\d\d:\d\d)

DEMO

【讨论】:

    【解决方案4】:

    你可以像这样使用String#match

    const date = "2018-02-03T06:30:00.000Z";
    const [timepart] = date.match(/\d+:\d+/) || [];
    console.log(timepart);

    【讨论】:

    • 您的解决方案的输出是 ["06:30"],但我需要的只是 06:30 没有括号。
    • 然后跳过数组初始化,得到你需要的东西。
    • 你注意到解构赋值了吗?
    • 否则我不明白你的评论。运行 sn-p 时输出为“06:30”。
    【解决方案5】:

    您只需使用moment.js

    有一个小问题。您想将 UTC 转换为本地时间,但您的字符串仍代表 UTC 时间。最后一个“Z”表示“零小时偏移”。如果“Z”是无效标签并且时间实际上是本地时间,您可以使用slice(0, -1) 删除最后一个“Z”。您可以查看 ISO 8601 数据元素和交换格式https://en.wikipedia.org/wiki/ISO_8601 以进一步了解该格式。

    var moment = require('moment');
    console.log( moment( '2018-02-03T06:30:00.000Z'.slice(0, -1) ).format('HH:MM') );
    

    如果最后一个“Z”字符确实有效,并且您仍需要将 06:30 UTC 转换为本地时间,只需删除 slice

    console.log( moment('2018-02-03T06:30:00.000Z').format('HH:MM') );
    

    这将打印转换后的本地时间。 moment.js 可以简化您的日期和时间操作。查看https://momentjs.com 获取文档。

    如果你使用 node.js

    $ npm install moment
    

    安装 moment.js 节点模块。

    【讨论】:

    • 使用时刻我已经做到了。我正在尝试使用正则表达式。无论如何,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多