【问题标题】:Why does this Javascript script not give ant output?为什么这个 Javascript 脚本没有给出 ant 输出?
【发布时间】:2015-06-30 11:57:29
【问题描述】:

我想制作一个简单的实时日期计数器,它会在脚本位于文件中的任何位置输出到 html 中。这是 JSFiddle,这是脚本:

var today = newDate();
var dd = today.getDate();
var mm = today.getMonth();
var yyyy = today.getFullYear();

if (dd = 1 || 21 || 31) {
    dd = dd + 'st'
} else if (dd = 2 || 22) {
    dd = dd + 'nd'
} else if (dd = 3 || 23) {
    dd = dd + 'nd'
} else {
    dd = dd + 'th'
}

if (mm = 0) {
    mm = "JANUARY";
} else if (mm = 1) {
    mm = "FEBRUARY";
} else if (mm = 2) {
    mm = "MARCH";
} else if (mm = 3) {
    mm = "APRIL";
} else if (mm = 4) {
    mm = "MAY";
} else if (mm = 5) {
    mm = "JUNE";
} else if (mm = 6) {
    mm = "JULY";
} else if (mm = 7) {
    mm = "AUGUST";
} else if (mm = 8) {
    mm = "SEPTEMBER";
} else if (mm = 9) {
    mm = "OCTOBER";
} else if (mm = 10) {
    mm = "NOVEMBER";
} else {
    mm = "DECEMBER";
}

today = dd + '|' + mm + '|' + yyyy;
document.write(today);

我知道这是编写任何一般代码的最低效且可能不正确的方式(这是我在 JS 中做过的第二件事。)但请接受我的愚蠢错误。

非常感谢。

【问题讨论】:

  • 等式检验是==赋值是=
  • 使用== 来测试相等性,而不是单个=,你也不能这样做:dd = 2 || 22 需要两个测试:dd == 2 || dd == 22
  • 就是喜欢这个缩进。 :)
  • 一般来说,你应该学习在开发者工具控制台中阅读异常...学习使用调试器、放置断点等...
  • @DhavalMarthak 我会使用数组。不是开关。

标签: javascript date


【解决方案1】:

使用

var today = new Date();

改为

var today = newDate();

输出将是“1st|FEBRUARY|2015”


更新:(更优雅的方式)

b=(new Date()).toLocaleString('en-us', {
  day: 'numeric',
  month: "long",
  year: 'numeric'
}).replace(/(\w+) (\d+), (\d+)/, '$2|$1|$3'); // 30|June|2015
dd=parseInt(b, 10);
op='';
suffix =["st","nd","rd","th"];
if(parseInt(dd) > 4)
    op=dd+""+suffix[3];
else
    op=dd+""+suffix[(parseInt(dd)%10)-1];
alert(b.replace(/^\d+/, op))

【讨论】:

  • 今天不是 2 月 1 日吧?
  • 是的,这是对该线程主题的回答:“为什么这个 Javascript 脚本不提供 ant 输出?”。顺便说一句,这可能会有所帮助: (new Date()).toUTCString().replace(/.* (\d+) (\w{3}) (\d{4}).*/, '$1|$2| $3') -> "30|Jun|2015"
【解决方案2】:

避免 if 的级联

var month = ["January", "Feb", "March",....,"Dec"];//store array of months as string
var suffix =["st","nd","rd","th"];
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth();
var yyyy = today.getFullYear();
var op="";
if(parseInt(dd) > 4)
    op+=dd+""+suffix[3]+"|";
else
    op+=dd+""+suffix[(parseInt(dd)%10)-1]+"|";
op+=month[parseInt(mm)]+"|"+yyyy;

让它变得简单 working fiddle

仅供参考:刚刚看到 answer 和 0-11 几个月,而 0 代表一月,11 代表十二月

【讨论】:

    【解决方案3】:

    不要重新发明轮子,只需使用moment.js

    var d = new Date();
    
    document.write(moment().format('Do|MMMM|YYYY'));
    <script src="https://raw.githubusercontent.com/moment/moment/develop/moment.js"></script>

    【讨论】:

    • @theRoot 它是 23kB ...对于初学者来说,我认为这更容易,这样他们就可以专注于他们想要写的东西。
    • 对于 javascript 的初学者,强烈不推荐
    • 那我们同意不同意吧。
    • 是的,如果 OP 想要学习 JS IMO,我接受它不推荐..仅供参考 ..我也是 JS 的新手...@Ja͢ck
    • 您如何将答案发布为 comm wiki?
    【解决方案4】:

    只要写:var today = new Date();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多