如果客户端时间提前或落后,如何在客户端获得准确的UTC / GMT时间?

时间:2015-05-26 04:19:48

标签: javascript datetime

据我所知,

var now = new Date(); 
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());

它基于客户端时间机器。

假设客户端机器已经改变了他们的时间,那么这将是一个问题。

如果我错了,请纠正我。

问题   - 如果客户时间提前或落后,如何在客户端获得准确的UTC / GMT时间?

2 个答案:

答案 0 :(得分:2)

您可以使用toISOString功能:

- (void) save_Clicked:(id)sender {

mustRefresh = YES; // there is new record

ConditionsAppDelegate *appDelegate = (ConditionsAppDelegate *)[[UIApplication sharedApplication] delegate];

//Create a Condition Object.
Condition *c = [[Condition alloc] init];

NSInteger newId = c.getNextConditionId;

Condition *cond = [[Condition alloc] initWithPrimaryKey:newId];

cond.condition_area = txtConditionArea.text;
cond.condition_detail = txtConditionDetail.text;
cond.condition_name = conditionName;

NSLog(@"    ///ABOUT TO SAVE THE CONDITION: %@ / %@ / %@", cond.condition_area, cond.condition_detail, cond.condition_name);

//Add the object
[appDelegate addCondition:cond];
[cond addCondition];

[appDelegate populateFromDatabase];

rvc.conditions = [appDelegate activeConditions];

// UPDATE THE TABLEVIEW
[rvc.tableView reloadData];

// release
[cond release];
[c release];

//Dismiss the controller.

[self.navigationController dismissViewControllerAnimated:YES completion: ^{

    if (mustRefresh)
        if ([self.delegate respondsToSelector:@selector(refreshTable)]) // this is just for check if 'refreshTable responds', prevents from crashing
            [self.delegate refreshTable];

}];

}

或者通过计算timezone offset

来创建新日期
var utc = new Date().toISOString(); // 2015-05-26T04:30:09.490Z

请注意,在上面的代码var now = new Date(); var utc = new Date(now.getTime() + now.getTimezoneOffset() * (60 * 1000)); 中,以分钟为单位返回时区。所以,我把它转换成毫秒。

总有moment-timezone库可以简化处理时区。

答案 1 :(得分:0)

如果您想要一个独立于用户时钟的解决方案,您必须使用某种类型的Web服务。您可以构建自己的(将服务器的时间发送到浏览器),或使用Web服务。

以下是使用timeapi.org的示例,该示例以GMT格式返回并输出当前时间。您可以修改此代码,将用户的时区发送为偏移量(将网址替换为http://www.timeapi.org/+10/now,其中+10是偏移量)。

<script type="text/javascript">
  function myCallback(json) {
    alert(new Date(json.dateString));
  }
</script>
<script type="text/javascript" src="http://timeapi.org/utc/now.json?callback=myCallback"></script>

取自this page