Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fetch是否总是发送UTC时间戳?_Javascript_Reactjs_Redux_Timezone_Timezone Offset - Fatal编程技术网

Javascript fetch是否总是发送UTC时间戳?

Javascript fetch是否总是发送UTC时间戳?,javascript,reactjs,redux,timezone,timezone-offset,Javascript,Reactjs,Redux,Timezone,Timezone Offset,当我在数据库中保存一些提醒时,我正在开发一个应用程序。下面是此函数的代码段: const createNewSmsReminder = (textBody, dateTime) => { console.log(dateTime) let body = { 'content' : "This is a test", 'when' : dateTime

当我在数据库中保存一些提醒时,我正在开发一个应用程序。下面是此函数的代码段:

const createNewSmsReminder = (textBody, dateTime) => {
        console.log(dateTime)
        let body = {
                    'content' : "This is a test",
                    'when' : dateTime
                    }
        saveNewReminderAction(urlParams.uuid, body)
    }
它调用saveNewReminderAction:

export const createNewSmsReminderAction = (uuid, body) => (dispatch) => {
    dispatch({type: CREATE_NEW_SMS_REMINDER_PENDING})
    fetch(config.url.API_URL+'/api/subscription/'+uuid+'/reminder', p_authorisation('POST', body))
        .then(response=> response.json())
        .then(data => dispatch({type: CREATE_NEW_SMS_REMINDER_SUCCESS, payload: data}))
        .catch(error => dispatch({type: CREATE_NEW_SMS_REMINDER_ERROR, payload: error}))
}
在createNewSms
控制台上,log(dateTime)
返回:
2020年9月28日星期一13:04:42 GMT-0400(东部夏时制)

但当我观察请求的有效负载时,我注意到时间戳已转换为UTC格式:

{
   content: "This is a test", 
   when: "2020-09-28T17:04:42.158Z"
}
这是fetch/chrome/强制执行的正常行为,还是我做了错事?此外,如果这是正常的,那么它在不同的浏览器中是否一致,或者我期待着在未来出现令人不快的惊喜?有没有办法强制执行?(值得一提的是,这正是我所追求的行为)

编辑:以下是我的p_授权方法:

const p_authorisation = (method, body) => {
    let auth = {
        method: method,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Origin': '',
            'Authorization': 'Bearer ' + localStorage.getItem('token'),
            // 'skip_before_action' : 'verify_authenticity_token'
        },
        body: body ? JSON.stringify(body) : ''
    }
    return auth
}

虽然你的问题没有提到,但我会假设:

  • 传递给
    createnewsmrementer
    dateTime
    参数实际上是一个
    Date
    对象
  • p\u authorization
    函数在传入的
    body
    对象上调用
    JSON.stringify
    ,并将其分配给它返回的对象的
    body
    属性
当您对
Date
对象或包含
Date
对象的对象进行字符串化时,将调用该函数,该函数反过来调用创建JSON中使用的ISO 8601字符串表示

toISOString
函数始终返回
Date
对象的UTC表示形式。这与
fetch
没有任何关系-这只是
Date
对象的工作方式

Date
对象在内部只存储一个东西,即毫秒精度的a。因此,尽管名称不同,但它不是日期,而是基于UTC的时间戳

此外,当您在
日期
对象上调用
控制台.log
时,该行为是特定于实现的。没有定义输出应该是什么的规范。(ECMAScript定义
日期
,但不定义
控制台
,并且拒绝了我的请求,使日志记录
日期
对象的输出形式化。)

目前的情况是,一些实现将记录
toString
的输出,这是以人类可读的格式表示的本地时间,而其他实现将记录
toISOString
的输出,这是以UTC和ISO 8601扩展格式表示的

由于实现可能会有所不同-您不应该直接记录
日期
对象。而是记录这两个函数之一的字符串输出。换句话说,如果执行
console.log(dateTime.toISOString())
操作,您将获得与JSON中显示的结果相同的结果


简言之,这是正常的行为。您的程序运行正常。

虽然您的问题没有提到,但我将假设以下情况:

  • 传递给
    createnewsmrementer
    dateTime
    参数实际上是一个
    Date
    对象
  • p\u authorization
    函数在传入的
    body
    对象上调用
    JSON.stringify
    ,并将其分配给它返回的对象的
    body
    属性
当您对
Date
对象或包含
Date
对象的对象进行字符串化时,将调用该函数,该函数反过来调用创建JSON中使用的ISO 8601字符串表示

toISOString
函数始终返回
Date
对象的UTC表示形式。这与
fetch
没有任何关系-这只是
Date
对象的工作方式

Date
对象在内部只存储一个东西,即毫秒精度的a。因此,尽管名称不同,但它不是日期,而是基于UTC的时间戳

此外,当您在
日期
对象上调用
控制台.log
时,该行为是特定于实现的。没有定义输出应该是什么的规范。(ECMAScript定义
日期
,但不定义
控制台
,并且拒绝了我的请求,使日志记录
日期
对象的输出形式化。)

目前的情况是,一些实现将记录
toString
的输出,这是以人类可读的格式表示的本地时间,而其他实现将记录
toISOString
的输出,这是以UTC和ISO 8601扩展格式表示的

由于实现可能会有所不同-您不应该直接记录
日期
对象。而是记录这两个函数之一的字符串输出。换句话说,如果执行
console.log(dateTime.toISOString())
操作,您将获得与JSON中显示的结果相同的结果


简言之,这是正常的行为。你的程序运行正常。

什么是
p\u授权
?我在我的原始帖子中添加了该方法。什么是
p\u授权
?我在原始帖子中添加了该方法。完全正确,但我有太多的假设。最好先留下评论,询问细节。你好@Matt Johnson Pint,谢谢你的回复。您的假设事实上是正确的,我确实在p_授权方法中对请求体使用JSON.stringify。事实上,我已经编辑了我的初始问题来添加方法。感谢您花时间深入了解这个问题,您的回答帮助我对我的方法的行为有了很好的理解。完全正确,但我有太多的假设。最好先留下评论,询问细节。您好@Matt Johnson Pint,感谢您的回答。您的假设事实上是正确的,我确实在p_授权方法中对请求体使用JSON.stringify。事实上,我已经编辑了m