JavaScript:在不考虑时区的情况下将String转换为Date对象

时间:2018-11-13 13:10:06

标签: javascript date momentjs

输入:我有一个日期字符串:"2018-11-30T01:00:00+11:00"

用例:我需要使用纯js或任何库将其转换为Date对象。

结果:我应该收到一个日期对象,其日期部分为"2018-11-30",时间部分为"1:00"

请帮助。我尝试了所有解决方案,但时间总是在变化以匹配我的机器的时区。我既不想这种行为,也不想在后端进行复杂的时间转换。

1 个答案:

答案 0 :(得分:0)

这是我为实际解决此问题的解决方案。


使用的库:带有普通javascript Date类的momentjs。

步骤1。 将String日期转换为时刻对象(PS:只要不调用toDate()方法,时刻就会保留原始日期和时间):

const dateMoment = getMomentFromIsoString(date);

第2步。 从先前创建的矩对象中提取hoursminutes值:

  const hours = dateMoment.hours();
  const mins = dateMoment.minutes();

第3步。 将时刻转换为日期(PS:这将根据您的浏览器/机器的时区来更改原始日期,但请不要担心,请阅读第4步。)

  const dateObj = dateMoment.toDate();

第4步。 手动设置步骤2中提取的小时和分钟。

  dateObj.setHours(hours);
  dateObj.setMinutes(mins);

第5步。 dateObj现在将显示原始日期,没有任何时区差异。因为我们手动设置原始的小时和分钟,所以即使是夏令时更改也不会对日期对象产生任何影响。

希望这会有所帮助。