RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1235863
Accepted
HedgeHog
HedgeHog
Asked:2022-01-25 21:04:24 +0000 UTC2022-01-25 21:04:24 +0000 UTC 2022-01-25 21:04:24 +0000 UTC

将 python 代码移动到 javascript

  • 772
cases = (2, 0, 1, 1, 1, 2)

intervals = (
    (31536000, 'год', 'года', 'лет'),
    (2592000, 'месяц', 'месяца', 'месяцев'),
    (86400, 'день', 'дня', 'дней'),
    (3600, 'час', 'часа', 'часов'), 
    (60, 'минуту', 'минуты', 'минут'),
    (1, 'секунду', 'секунды', 'секунд'),)

def plural_form(n: int, v: (list, tuple)):
    """Функция возвращает число и просклонённое слово после него

    Аргументы:
    :param n: число
    :param v: варианты слова в формате (для 1, для 2, для 5)

    Пример:
    plural_form(difference.days, ("день", "дня", "дней"))

    :return: Число и просклонённое слово после него
    """

    return form(n) + f"  {v[2 if (4 < n % 100 < 20) else cases[min(n % 10, 5)]]}"

def form(args):
    #Функция форматирует числа в виде ("10000" > "10.000")
    return "{:,}".format(args).replace(",", ".")

def show_time(seconds, granularity=5):
    """Функция возвращает цифровое время с использованием utctimestamp"""
    result = []

    seconds = int(seconds)

    for count, *name in intervals:
        value = seconds // count
        if value:
            seconds -= value * count
            result.append(plural_form(value, name))

    return '. '.join(result[:granularity]) if result else '0 сек'

有这样的功能,show_time帮我把这段代码转成javascript,我的尝试就出现了:

var cases = [2, 0, 1, 1, 1, 2];
var intervals = [
                  [31536000, ['год', 'года', 'лет']],
                  [2592000, ['месяц', 'месяца', 'месяцев']],
                  [86400, ['день', 'дня', 'дней']],
                  [3600, ['час', 'часа', 'часов']],
                  [60, ['минуту', 'минуты', 'минут']],
                  [1, ['секунду', 'секунды', 'секунд']]
                ];

function plural_form(n, v){
  return n + ` ${v[(4 < n % 100 < 20) ? 2 : cases[Math.min(n % 10, 5)]]}`;
}

function show_time(utctime, granularity=4){

  let results = [];

  let seconds = parseInt(utctime);

  for (var i = 0; i < intervals.lenght; i++) {

    let value = Math.floor(seconds / intervals[i][0]);

    if (value){
      seconds -= value * intervals[i][0]
      results.push(plural_form(value, intervals[i][1]))
    }

  return results.slices(0, granularity).join('. ');

  }

}

console.log(show_time(1611584));
javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    OPTIMUS PRIME
    2022-01-25T23:19:23Z2022-01-25T23:19:23Z
    def form(args):
        #Функция форматирует числа в виде ("10000" > "10.000")
        return "{:,}".format(args).replace(",", ".")
    

    ↓

    function format(n) {
      return Intl.NumberFormat('de-DE').format(n);
    }
    

    def plural_form(n: int, v: (list, tuple)):
        return form(n) + f" {v[2 if (4 < n % 100 < 20) else cases[min(n % 10, 5)]]}"
    

    4 < n % 100 < 20- 在 JS 中,这总是给出 true,因为首先它被执行4 < n % 100,然后从那里返回的那个true / false与 20 作为0 < 20or进行比较1 < 20。这是通过“和”写的,4 < n % 100 && n % 100 < 20
    ↓

    function plural_form(n, values) {
      let index = (4 < n % 100 && n % 100 < 20) ? 2 : cases[Math.min(n % 10, 5)];
    
      return format(n) + ` ${values[index]}`;
    }
    

    def show_time(seconds, granularity = 5):
        result = []
    
        seconds = int(seconds)
    
        for count, *name in intervals:
            value = seconds // count
            if value:
                seconds -= value * count
                result.append(plural_form(value, name))
    
        return '. '.join(result[:granularity]) if result else '0 сек'
    

    for count, *name in intervals→ JS 中的解构赋值

    一起:

    let cases = [2, 0, 1, 1, 1, 2];
    let intervals = [
      [31536000, 'год', 'года', 'лет'],
      [2592000, 'месяц', 'месяца', 'месяцев'],
      [86400, 'день', 'дня', 'дней'],
      [3600, 'час', 'часа', 'часов'],
      [60, 'минуту', 'минуты', 'минут'],
      [1, 'секунду', 'секунды', 'секунд'],
    ];
    
    function plural_form(n, values) {
      let index = (4 < n % 100 && n % 100 < 20) ? 2 : cases[Math.min(n % 10, 5)];
    
      return format(n) + ` ${values[index]}`;
    }
    
    function format(n) {
      return Intl.NumberFormat('de-DE').format(n);
    }
    
    function show_time(seconds, granularity = 4) {
      let result = [];
      seconds = parseInt(seconds);
    
      intervals.forEach(([count, ...names]) => {
        let value = seconds / count | 0; //  |0 ← Отбрасывает дробную часть
        if (value) {
          seconds -= value * count;
          result.push(plural_form(value, names));
        }
      });
    
      return result.slice(0, granularity).join('. ') || '0 сек';
      // В питоне «or», в JS → ||
      // Если result пустой, первое выражение дает "", берется '0 сек';
    }
    
    console.log( show_time("123456789") );


    该函数可以在几秒钟内计算,但不考虑闰年,而且并非所有月份都有 30 天。不是联名吗?

    • 3

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5