我有一个脚本,我试图将UTC日期/时间转换为本地时区。这一切似乎都在Chrome和IE / Edge中运行良好,但显示"无效日期"在Firefox中。堆栈上还有其他一些问题,但似乎没有一个问题可以满足我的特定需求。
我的脚本执行此操作...
获取一个日期,该日期是Fabrik在Joomla中发布的特定格式。 (我无法控制这种格式)
它看起来像这样:
2017-07-02 20:57
然后我创建一个UTC的新日期并将其转换为本地时区。
toLocalString方法:
$(document).ready(function() {
$('.plg-date > .fabrikElement > div').not('.fabrikSubElementContainer').each(function() {
if($(this).text().length > 0) {
var newdate = new Date($(this).text() + " UTC");
var options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
timeZoneName: 'short'
}
$(this).text(newdate.toLocaleString('en-US', options));
}
})
});
moment.js方法:
$(document).ready(function() {
$('.plg-date > .fabrikElement > div').not('.fabrikSubElementContainer').each(function() {
if($(this).text().length > 0) {
var date = new Date($(this).text() + " UTC");
var newdate = moment(date).format('ddd MMM DD YYYY h:mm A')
$(this).text(newdate);
}
})
});
这两种方法都会导致firefox中的日期无效。建议?
答案 0 :(得分:2)
使用片刻,您可以使用moment.utc
和local()
:
var newdate = moment.utc($(this).text()).local().format('ddd MMM DD YYYY h:mm A')
moment.utc
将您的输入解析为UTC值,而local()
将其转换为当地时间。
答案 1 :(得分:1)
您的格式字符串与API需要的不匹配。您目前正在传递文本(2017-07-02 20:57
)并附加UTC
(即2017-07-02 20:57 UTC
)。在javascript控制台中:
new Date("2017-07-02 20:57");
Date 2017-07-02T19:57:00.000Z
new Date("2017-07-02 20:57 UTC")
Invalid Date
如果删除UTC
组件,应工作。但请注意,javascript正在将20:57
转变为19:57
。这是因为夏令时可能会在客户端的计算机上发生。这是否会影响您的应用程序取决于时间戳的来源。
至于你提供的那个例子,你的输入字符串的格式字符串应该是YYYY-MM-DD HH:mm
。