我试图设置日期格式和时区,然后当我尝试格式化矩以提取日期时,它只会返回无效日期。
以这种方式执行操作时,我不会得到瞬间。
let data = moment(date, 'YYYY-MM-DD HH:MM').tz(TIMEZONE); //moment('2014-06-01 12:00:00Z').tz(TIMEZONE); // TIMEZONE = 'America/New_York'
console.log(data.format('MM/DD/YYYY'))
let value = inventoryBase.lastUpdated + SPACE + data.format('MM/DD/YYYY') + ' at ' + data.format('LT') + SPACE + moment.tz([2012, 0], TIMEZONE).zoneAbbr();
value = value + ' by ' + lastUpdated.editedBy;
但是值的输出不正确:
Last updated Invalid date at Invalid date EST by System
以这种方式执行操作时,我不喜欢使用力矩。
let data = moment(date).tz(TIMEZONE); //moment('2014-06-01 12:00:00Z').tz(TIMEZONE);
let value = inventoryBase.lastUpdated + SPACE + data.format('MM/DD/YYYY') + ' at ' + data.format('LT') + SPACE + moment.tz([2012, 0], TIMEZONE).zoneAbbr();
value = value + ' by ' + lastUpdated.editedBy;
但是值的输出是正确的:
Last updated 05/01/2019 at 3:59 AM EST by System
过时的错误:
Deprecation warning: value provided is not in a recognized RFC2822 or ISO
format. moment construction falls back to js Date(), which is not reliable
across all browsers and versions. Non RFC2822/ISO date formats are
discouraged and will be removed in an upcoming major release. Please refer
to http://momentjs.com/guides/#/warnings/js-date/ for more info.
答案 0 :(得分:1)
尝试以下操作:
const data = moment.tz(date, 'YYYY-MM-DD HH:mm:ssZ', TIMEZONE);
const value = `${inventoryBase.lastUpdated} ${data.format('L [at] LT zz')} by ${lastUpdated.editedBy}`;
其他几点:
在您的原始代码中,由于格式字符串与数据格式不匹配,因此无法正常工作。 MM
是几个月,而mm
是分钟,而您没有包括几秒钟。
在第二次尝试中,您收到了弃用警告,因为您提供的数据格式不是the list of known supported strings。
您将区域的缩写改为任意日期,而不是所讨论的日期。时区缩写因日期而异,因此最好在工作的同一时间获取。
在同一输出字符串中混合标记化格式(MM/DD/YYYY
)和可识别语言环境的格式(LT
)不好。我改用L
,因为它获取了您正在使用的语言环境的日期格式。
由于您的数据中有一个Z
,因此它将始终被视为UTC。因此,您可以跳过使用moment.tz
进行解析的权利。如果您没有Z
,则可以改用moment.utc(data, format).tz(timezone)
。
我在回答中使用了JavaScript template literals,因为在这种情况下,它们比串联更干净。