假设您网站的用户输入了一个日期范围。

2009-1-1 to 2009-1-3

您需要将此日期发送到服务器进行某些处理,但服务器要求所有日期和时间均为UTC。

现在假设用户在阿拉斯加。由于它们所处的时区与UTC完全不同,因此需要将日期范围转换为如下所示:

2009-1-1T8:00:00 to 2009-1-4T7:59:59

使用JavaScriptDate对象,如何将第一个“本地化”日期范围转换为服务器能够理解的内容?


当前回答

根据我的观察,

var timeUtc=新日期();

timeUtc将始终显示UTC时间,但如果您调试或控制台,浏览器将始终显示当前时区的时间。

如果您将timeUtc作为参数发送到任何post请求,那么在chrome的网络选项卡中,您可以检查post数据,您将看到timeUtc将具有UTC时间。

其他回答

var myDate = new Date(); // Set this to your date in whichever timezone.
var utcDate = myDate.toUTCString();

这个功能对我来说非常有用。

function ParseDateForSave(dateValue) {
    // create a new date object
    var newDate = new Date(parseInt(dateValue.substr(6)));

    // return the UTC version of the date
    return newDate.toISOString();
}

看看你的问题,很明显,你只想将日期范围发送到后端进行进一步的后期处理。

我假设您符合标准数据指南,该指南要求数据采用特定格式。例如,我使用ODATA,这是一个RESTfull API,它期望日期时间对象的格式为:-

YYYY-MM-ddt0:00:00。

这可以通过下面的代码段轻松实现(请根据您的要求更改格式)。

var mydate//假设这是我要公开的约会对象var UTCDateStr=mydate.getUTCFullYear()+“-”+mydate.get-UTCMonth()+”-“+mydate.getUTCDate()+(T00:00:00);

另一方面,如果您处于我的情况,您从后端收到了一个日期,浏览器会将其转换为您的本地日期。另一方面,如果您对UTC日期感兴趣,则可以执行以下操作:-

var mydate//假设这是我要公开的约会对象var UTCDate=新日期(mydate)/*创建日期对象的副本。仅当您出于某种原因需要原始本地日期时才需要*/UTCDate.setTime(UTCDate.getTime()+UTCDate.getTimezoneOffset()*60*1000);

上面的代码片段基本上是根据时区添加/减去浏览器添加/减去的时间。

例如,如果我在美国东部时间(GMT-5),并且我的服务返回日期时间对象=2016年8月17日星期三00:00:00 GMT-0500我的浏览器会自动减去时区偏移(5hrs)以获得我的本地时间。因此,如果我尝试获取2016年8月16日星期三19:00:00 GMT-0500的时间。这会导致很多问题。那里有很多库,这肯定会让这变得更容易,但我想分享纯JS方法。

有关更多信息,请查看:http://praveenlobo.com/blog/how-to-convert-javascript-local-date-to-utc-and-utc-to-local-date/在那里我得到了灵感。

希望这有帮助!

如果您的日期上有时区,则可以使用date fns tz:

import { zonedTimeToUtc } from 'date-fns-tz';

const dateBrazil = new Date() // I'm in Brazil, you should have or get the user timezone.
const dateUtc = zonedTimeToUtc(dateBrazil, 'America/Sao_Paulo')

您可以使用以下方法将任何js日期转换为UTC:

let date = new Date(YOUR_DATE).toISOString()

// It would give the date in format "2020-06-16T12:30:00.000Z" where Part before T is date in YYYY-MM-DD format, part after T is time in format HH:MM:SS  and Z stands for UTC - Zero hour offset