moment.js转换没有效果
问题描述:
我有一个输入字段,用户需要选择日期/时间 根据一年中的时间,本地机器将始终处于GMT或BST状态。moment.js转换没有效果
对于那些谁不知道英国时间的恶作剧:
GMT(格林威治标准时间)始终为UTC
BST(英国夏令时)为GMT + 1在夏季
用户输入的日期将存储在设置为GMT的数据库中,因此永远不会偏移时间。因此我需要将用户输入的内容转换为GMT/UTC。
但是,我的转换导致返回相同的日期。
我在做什么错?
https://jsfiddle.net/r68owagL/
下面是从的jsfiddle
function log(obj) {
var html = "<table>"
for(var member in obj)
{
html += "<tr>"
+ "<td>" + member + ": </td>"
+ "<td>" + obj[member].format("YYYY-MM-DD HH:mm:ss") + "</td>"
+ "</tr>";
}
html += "</table>";
document.body.innerHTML = html;
}
var strDate = '2016-07-14 10:51:00';
var obj = {
n: moment(strDate), //Gives: 2016-07-14 10:51:00
u: moment.utc(strDate), //Gives: 2016-07-14 10:51:00
b: moment.tz(strDate, "Europe/London") //Gives: 2016-07-14 10:51:00
}
log(obj);
答
代码如果您删除格式的字符串,然后输出日期,像这样
obj[member].format()
那么像这样
输出n: 2016-07-14T10:51:00+02:00
u: 2016-07-14T10:51:00+00:00
b: 2016-07-14T10:51:00+01:00
因此,自定义格式字符串只输出日期而不考虑偏移量。要考虑到这些,将它打印出来,像这样
obj[member].utc().format("YYYY-MM-DD HH:mm:ss")
导致
n: 2016-07-14 08:51:00
u: 2016-07-14 10:51:00
b: 2016-07-14 09:51:00
关闭足以让我正确的我的代码之前转换为UTC:https://jsfiddle.net/ r68owagL/1 /,因此将其标记为答案。基本上设置日期然后.utc()它。而不是.utc()然后设置日期 - 现在有意义我想 - 我这样做是这样说的,这是一个UTC日期,而不是这是一个本地日期。 – Morvael
进一步更新,似乎是从dd/mm/yyyy HH:mm:ss的英国格式中读取中的用户选定值,结果是moment.js在转换后再次给出相同的值。 https://jsfiddle.net/r68owagL/2/为了解决,我必须在将它传递给moment()之前手动将格式设置为yyyy-MM-dd HH:mm:ss。 – Morvael
@Morvael,你会得到一个贬低警告,那个时刻建设回落到JS日期。您需要为日期指定格式。那么你将不必手动解析。请参阅http://momentjs.com/guides/#/warnings/js-date/和http://momentjs.com/guides/#/parsing/known-formats/ –