【问题标题】:Moment js - get date without considering time zoneMoment js - 在不考虑时区的情况下获取日期
【发布时间】:2018-07-25 21:02:46
【问题描述】:

我确实阅读了不同的 StackOverflow 帖子,他们建议从那一刻起使用 .utc,但它不起作用

注意:我在 PST 区

const start = '2018-06-10T21:00:00-04:00';
const end = '2018-06-10T23:00:00-04:00';
const noconversion = moment.utc(start).format('MM/DD/YYYY');
const converted = moment(end).format('MM/DD/YYYY');

当前输出:

没有转换 - 2018-06-11

转换 - 2018-06-11

预期输出: 06/10/2018 只需从提供的日期获取日期

CODEPEN Link

const date = '2018-06-16T00:00:00-04:00';
const oldConversion = moment(date).format('MM/DD/YYYY');
const newConversion = moment.parseZone(date).format('MM/DD/YYYY');
 
alert('********oldConversion**********'+ oldConversion);
alert('********newConversion**********'+ newConversion);

【问题讨论】:

  • 为什么不做一个自定义函数来做呢?真的必须与 moment.js 一起使用吗?
  • 自定义函数,我也想格式化日期。
  • 我认为:新日期也考虑时区。如何在所有情况下制作自定义功能

标签: javascript momentjs


【解决方案1】:

您尝试过 parseZone 吗?

moment.parseZone(end).format('MM/DD/YYYY');

这应该会保留您的 UTC 偏移量。如果您想保存它,您还可以计算 UTC 偏移量:

moment.parseZone(end).format('MM/DD/YYYY').utcOffset();

【讨论】:

  • 我试过了,我确实在某个时区遇到了同样的问题。我会再检查一遍
  • @KamalakannanJ 来自momentjs.com/docs/#/parsing/parse-zone 似乎正在进行一些转换
  • 我确实采用了这种方法,因为它解决了 EST/PST 问题。
【解决方案2】:

我建议的解决方案将忽略时区本身。它总是只需要日期。这可能是一种复杂的方法,但它总是适合你。

const start = '2018-06-10T21:00:00-04:00'.split('-').slice(0, -1).join('-');
const end = '2018-06-10T23:00:00-04:00'.split('-').slice(0, -1).join('-');
const noconversion = moment(start).format('MM/DD/YYYY');
const converted = moment(end).format('MM/DD/YYYY');

【讨论】:

  • 不提供时区怎么办?在这种情况下,这将失败。我不会冒这个险。我永远不会使用提供的字符串。
【解决方案3】:

如果你想忽略时区,那么为什么不从字符串本身呢?这只是一个开箱即用的想法。

function convertToDate(date_string) {
    var date = date_string.indexOf('T') > -1 ? new Date(date_string.split('T')[0]) : date_string.indexOf(' ') > -1 ? new Date(date_string.split(' ')[0]) : new Date(date_string.substring(0,10));
    return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
}

function convertToDate(date_string) {
    var date = date_string.indexOf('T') > -1 ? date_string.split('T')[0].split('-') : date_string.indexOf(' ') > -1 ? date_string.split(' ')[0].split('-') : date_string.substring(0,10).split('-');
    return date[1] + "/" + date[2] + "/" + date[0];
}

const start = '2018-06-10T21:00:00-04:00';
const converted = convertToDate(start);

【讨论】:

  • 不提供时区怎么办?在这种情况下,这将失败。我不会冒这个险。我永远不会使用提供的字符串。
  • 即使没有时区也不会失败,因为我正在使用所有日期标准中的 T 分隔符。
  • 我还是害怕使用字符串拆分方法
  • 我又添加了一个使用日期函数的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2011-08-28
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多