Javascript 从日期字符串以UTC格式正确计算日期时间
我试图用UTC计算日期时间,我有下面的代码和使用Javascript 从日期字符串以UTC格式正确计算日期时间,javascript,date,datetime,Javascript,Date,Datetime,我试图用UTC计算日期时间,我有下面的代码和使用 weeklyDish.orderBeforeTime=时区UTC( “欧洲/阿姆斯特丹”, 年, 月, 白天 小时 ); 功能时区UTC(时区、年、月、日、小时){ const dateObj=`${year}-${month}-${day}${hours}:00`; const datetime=datetime.fromFormat(dateObj,“yyyy-M-d H:mm”{ 时区, }); return datetime.toUTC(
weeklyDish.orderBeforeTime=时区UTC(
“欧洲/阿姆斯特丹”,
年,
月,
白天
小时
);
功能时区UTC(时区、年、月、日、小时){
const dateObj=`${year}-${month}-${day}${hours}:00`;
const datetime=datetime.fromFormat(dateObj,“yyyy-M-d H:mm”{
时区,
});
return datetime.toUTC().toString();
}
上面的代码总是返回错误的时间
如果已解析日期,则可以使用。但是,构造函数取决于本地时区,幸运的是您可以使用 棘手的部分是关于时区的,它在构造函数中不受支持,但无论如何,它只是一个简单的加法 所以我敢打赌这样的方法应该会奏效:
功能时区UTC(时区、年、月、日、小时){
返回新日期(Date.UTC(年、月-1、日、小时+时区));
}
注意:month参数是一个索引(基于0),因此如果1=一月,则需要将月份减少1(如我的示例所示)
编辑:呃,显然,
日期。UTC
返回时间戳,因此您仍然需要使用构造函数。您需要展示一个示例来演示您的问题。下面显示了Luxon的UTC和setZone方法的使用,这两种方法似乎都能正确地转换“欧洲/阿姆斯特丹”的日期集
请注意,传递给DateTime.fromISO的字符串必须形成有效的ISO 8601时间戳,如YYYY-MM-DDTHH
let DateTime=luxon.DateTime;
让[tz,y,m,d,h]=[“欧洲/阿姆斯特丹”,“2020”,“11”,“30”,“12'];
让date=DateTime.fromso(`y}-${m}-${d}T${h}`,{zone:“欧洲/阿姆斯特丹”});
console.log(tz+'\n'+date.toString());
设dateUTC=date.setZone('UTC');
log('setZone to UTC\n'+dateUTC.toString());
设dateUTC2=date.toUTC();
log('toUTC方法\n'+dateUTC2.toString())代码>
所谓的时区,如“欧洲/阿姆斯特丹”没有固定的偏移量,通常也必须考虑夏令时。即使在不遵守夏令时的情况下,也几乎肯定会有历史偏移量的变化,所以这不仅仅是添加固定偏移量的问题。这一点很好!有那么一会儿,我以为他通过的是偏移量,而不是区域。谢谢@RobG,但是当我给它发送这样一个日期时,let[tz,y,m,d,h]=[“欧洲/阿姆斯特丹”,2020,2,5,4]
i getInvalid DateTime
对不起,月份、日期等需要两位数的值,以便在连接时形成有效的ISO 8601时间戳,因此let[tz,y,m,d,h]=[“欧洲/阿姆斯特丹”,“2020”,“02”,“05”,“04”]