---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://yandex.com/dev/games/doc/en/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/hi/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/ko/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/ru/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/tr/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/vi/sdk/sdk-server-time.md
  - https://yandex.com/dev/games/doc/zh/sdk/sdk-server-time.md
  - href: zh/sdk/sdk-server-time.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/zh/llms.txt

# 服务器时间

<!-- source: zh/_includes/script-common.md -->
<!-- source: zh/_includes/script/index-js.md -->

<!-- endsource: zh/_includes/script/index-js.md -->

<!-- source: zh/_includes/script/requirements-js.md -->

<!-- endsource: zh/_includes/script/requirements-js.md -->

<!-- source: zh/_includes/script/image-modal-js.md -->

<!-- endsource: zh/_includes/script/image-modal-js.md -->
<!-- endsource: zh/_includes/script-common.md -->

Yandex Games SDK 允许获取与服务器同步的时间。这个方法对于以下场景非常有用：

- **防止作弊**：用户无法通过更改设备上的时间来影响游戏过程。
- **游戏事件**：您可以基于此添加需要可靠时间来源的活动和奖励（例如，每日或每周奖励、季节性事件和任务）。

## ysdk.serverTime() {#server-time}

该方法返回一个 `timestamp`，即以毫秒为单位的服务器时间，对所有设备来说都是一致的。它类似于 `Date.now()` 的结果格式，但后者返回的是用户设备的时间，可能与服务器时间不同，且不能防止玩家的作弊行为。`ysdk.serverTime()` 方法能够有效防止设备系统时间被人为篡改，因此更加可靠。

每当您需要获取当前时间时，就调用它。

{% list tabs %}

- 使用 await 的选项

  ```javascript showLineNumbers
  const ysdk = await YaGames.init();

    // 返回与服务器同步的毫秒时间。
    ysdk.serverTime(); // 例如，1720613073778。

    // 一段时间后再次调用。
    ysdk.serverTime(); // 例如，1720613132635。
  ```

- 不使用 await 的选项

  ```javascript showLineNumbers
  YaGames.init().then(ysdk => {

      // 返回与服务器同步的时间（以毫秒为单位）。
      ysdk.serverTime(); // 例如，1720613073778。

      // 一段时间后再次调用。
      ysdk.serverTime(); // 例如，1720613132635。
  });
  ```

{% endlist %}

## 每日奖励实现示例 {#reward-examples} {#reward-examples}

- 使用 `ysdk.serverTime()` 获取可靠的服务器时间。
- 通过 [player.setData()](https://yandex.com/dev/games/doc/zh/sdk/sdk-player.md#ingame-data) 保存数据。
- 实现了防止重复领取奖励的保护机制。
- 以安全的方式对时间进行比较。

{% note warning %}

示例中的 `giveReward()` 函数是你自行实现的，负责发放玩家奖励。

{% endnote %}

### 距上次登录游戏后24小时获得奖励 {#twenty-four-hours-reward}

```javascript showLineNumbers
YaGames.init().then(async ysdk => {
    // 初始化玩家。
    const player = await ysdk.getPlayer();

    // 获取已保存的数据。
    const data = await player.getData();

    // 当前服务器时间。
    const currentTime = ysdk.serverTime();

    // 上次领取奖励的时间（如果没有，则使用0）。
    const lastRewardTime = data.lastRewardTime || 0;

    // 24小时的毫秒数。
    const DAY_IN_MS = 24 * 60 * 60 * 1000;

    if (currentTime - lastRewardTime >= DAY_IN_MS) {
        // 已经过了24小时，可以发放奖励。
        await giveReward(); // 您的奖励发放函数。

        // 保存新的领奖时间。
        await player.setData({
            lastRewardTime: currentTime
        });
    }
});
```

### 奖励每天（UTC时间午夜重置一次）{#calendar-day-reward}

```javascript showLineNumbers
YaGames.init().then(async ysdk => {
    // 初始化玩家。
    const player = await ysdk.getPlayer();

    // 获取已保存的数据。
    const data = await player.getData();

    // 当前服务器时间。
    const currentTime = ysdk.serverTime();

    // 获取上次领奖日期，格式为 "YYYY-MM-DD"。
    const lastRewardDate = data.lastRewardDate || '';

    // 获取当前日期，格式为 "YYYY-MM-DD"。
    const currentDate = new Date(currentTime).toISOString().split('T')[0];

    if (currentDate !== lastRewardDate) {
        // 今天还没有领取奖励。
        await giveReward(); // 您的奖励发放函数。

        // 保存领奖日期。
        await player.setData({
            lastRewardDate: currentDate
        });
    }
});
```


---

<!-- source: zh/_includes/sdk-support.md -->
{% note info %}

技术支持团队将协助您将已完成的游戏发布到 Yandex 游戏平台。关于开发和测试方面的具体问题，其他开发人员将在[Discord 频道](https://discord.com/invite/wU4p3whr4T){.external}中进行回答。

{% endnote %}

如果您遇到 Yandex Games SDK 方面的问题或有其他问题想要咨询，请联系支持部门：

<!-- source: zh/_includes/button-chat.md -->
<a href="https://yandex.com/chat/#/user/a4fa5c06-75db-9b38-6eea-b1673785f7d5">
  <span class="button">写入聊天信息</span>
</a>
<!-- endsource: zh/_includes/button-chat.md -->
<!-- endsource: zh/_includes/sdk-support.md -->
