---
metadata:
  - name: generator
    content: Diplodoc Platform v5.66.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: https://yandex.com/dev/games/doc/zh/sdk/sdk-server-time.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.com/dev/games/doc/zh/llms.txt?revision=r21993288
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/zh/llms.txt?revision=r21993288

# 服务器时间

<!-- 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 允许获取与服务器同步的时间。 该方法适用于：

<!-- source: zh/_includes/sdk/common-with-plugins.md -->
- **防作弊保护**：用户无法通过更改设备时间来影响游戏进程。
- **游戏事件**：基于此，您可以添加需要可信时间来源的活动和奖励（例如，每日或每周奖励、季节性活动和任务）。
<!-- endsource: zh/_includes/sdk/common-with-plugins.md -->

## 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}

- 使用 `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/sdk-support.md -->
{% note info %}

支持服务员工帮助将成品游戏发布到 Yandex Games 平台。 关于开发和测试的具体问题，其他开发者会在[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/sdk-support.md -->
