【问题标题】:Convert date string to date object?将日期字符串转换为日期对象?
【发布时间】:2020-11-30 03:29:31
【问题描述】:

谁能帮帮我:

我需要创建以下内容。

10 月 4 日星期日 08.30 - 10.30 CET

在这困难之下,我需要能够显示本地时区??

有人可以建议我最好的方法吗?我可以用 moment.js 做到这一点吗?

谢谢,

【问题讨论】:

  • 请阅读How do I ask a good question?关于使用和不使用moment.js的数据解析的问题已经太多了。你都尝试了些什么?您希望确切获得什么日期?
  • 您尝试过什么,这是一个日期范围吗?

标签: javascript string date parsing momentjs


【解决方案1】:

您首先需要包含moment-timezone 以了解“CET”的含义。标准时刻不知道如何将命名时区转换为偏移量。

  1. 现在,您需要使用正则表达式来解析日期范围内有意义的信息。
  2. 提取信息后,将这些部分重构为开始和结束日期字符串。
  3. 解析相对于时区的日期字符串。

我以 ISO 8601 格式显示时刻日期对象,因此它们将采用 GMT(比 CET 晚 2 小时)。

const grammar     = /^(\w+) (\d+) (\w+) (\d+\.\d+) - (\d+\.\d+) (\w+)$/;
const inputFormat = 'dddd D MMMM HH.mm'

const input = 'Sunday 4 October 08.30 - 10.30 CET'
const m     = input.match(grammar);

const startDateInput = `${m[1]} ${m[2]} ${m[3]} ${m[4]}`;
const endDateInput   = `${m[1]} ${m[2]} ${m[3]} ${m[5]}`;
const timezone       = m[6];

console.log(`Input (Start Date)  : ${startDateInput}`);
console.log(`Input (End Date)    : ${endDateInput}`);

const startDate = moment.tz(startDateInput, inputFormat, timezone);
const endDate   = moment.tz(endDateInput, inputFormat, timezone);

console.log(`Output (Start Date) : ${startDate.toISOString()}`);
console.log(`Output (End Date)   : ${endDate.toISOString()}`);
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.min.js"></script>

【讨论】:

    【解决方案2】:

    我不确定您的确切问题。您可以使用 JavaScript 日期类。

    //This will return time, "Mon Aug 10 2020 19:46:31 GMT+0530 (India Standard Time)"
    const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
    
    // Here you can calculate offset hours
    const offsetHours = new Date().getTimezoneOffset() / 60;
    
    //This is the best way, beacuse sometimes offsethours might be wrong due to daylight saving rules
    console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
    

    并且有不同的方法来格式化字符串和进行其他计算。 希望这能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 2011-03-07
      • 2012-01-28
      • 1970-01-01
      • 2011-10-25
      • 2022-01-11
      • 2016-05-24
      • 2013-03-07
      相关资源
      最近更新 更多