【问题标题】:Questions about javascript dates关于javascript日期的问题
【发布时间】:2010-01-10 02:04:09
【问题描述】:

我有 2 个关于日期的问题。

第一个问题是如何从 Javascript 中的日期获取“AM/PM”?

第二个问题是说我有这个代码

    var convertedStartDate = new Date(dueDate);
    var month = convertedStartDate.getMonth() + 1;
    var day = convertedStartDate.getDate();
    var year = convertedStartDate.getFullYear();
     var shortDueDate = month + "/" + day + "/" + year;

现在你可以看到我想要这种格式 mm/dd/yyyy

所以我想知道如果说dueDate 是 1/9/2010 (mm/dd/yyyy),但该人输入为 dd/mm/yyyy(日期的其他格式版本)。

月 = 1 天 = 9 年份 = 2010

或者我是否必须以某种方式告诉它始终转换为 mm/dd/yyyy?还是它确实是自己的格式,以便它总是能得到正确的顺序?即,无论他们将日期放在什么顺序中,都将始终以 9 作为日期。

【问题讨论】:

  • 如果您正在进行大量日期处理或需要处理用户输入日期的多种不同方式,date.js 是一个涵盖许多这些基础的库 -- datejs.com

标签: javascript


【解决方案1】:

来,试试看:

now = new Date();

hour = now.getHours();
var tag = "";

if (hour >= 12) {
  tag = "pm";
} else {
  tag = "am";
}

至于您问题的第二部分,我只是将表单的这些部分分开字段,否则真的没有办法。您只需要在表单中写入一些提示即可。

【讨论】:

  • 哦,那是另一回事,还有另一个内置的东西可以从 1 点到 12 点做到这一点,就像我在 1 点想要它时有 1300 小时一样。
  • 这个例子不太正确。它应该说if (hour >= 12)。否则,中午半点将是“am”
  • 那么看看是不是大于12减去12呢?
  • 我修复了它,但它会工作得很好,因为它总是会返回一个整数,这不包括分钟。
【解决方案2】:

您需要始终将用户输入的任何内容转换/转换为 Javascript 日期对象。请记住 - Javascript 是客户计算机的本地语言...美国人的格式设置与英国或中国的人不同。

为了简单起见...建议或在输入文本框附近提供所需输入格式的提示。然后,使用正则表达式验证该格式。这样,您几乎可以保证获得所需的日期……嗯……除非用户禁用了 Javascript。大声笑...在那种情况下...您需要在服务器端进行转换(无论如何您都应该这样做)。

【讨论】:

    【解决方案3】:

    为了获得某个时间的上午/下午,我发现了一些我很久以前写的旧代码。请参阅此处的(删除 am/pm),您可以使用子字符串将其替换为 get。

    function ValidateAdvancedTime(time, formatType){
      time = time.replace(".", ":");
      var newTime = time.substring(0, (time.indexOf(":") + 3)); // Strip out the seconds
      var status = ValidateTime(newTime, formatType);
    
      if(status == false) 
        return false;
    
      var seconds = time.substring(time.indexOf(":") + 4, time.length);
      if(seconds.length > 2) 
        **seconds = seconds.substring(0, 2);                      // Remove any AM/PM afterwards**
    
      if(!isNaN(seconds)) {                                         // Make sure its a number and it's between 0 and 59
        if((seconds <= 59) && (seconds >= 0)) 
            return true;
      }
      return false; 
    

    }

    就日期而言,我在数据库中存储 1/9/2010 或 01/09/2010 从未遇到任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多