簡體   English   中英

怎么把“ Saturday 9:00 PM”轉換成日期對象?

[英]How to convert “Saturday 9:00 PM” to date object?

星期幾和時間是我僅有的兩個信息。 如何使用Datemoment.js構造一個有效的日期對象(當前星期)?

我已經嘗試了以下方法,但是它似乎不起作用:

moment('Saturday 9:00 PM').format()
// "Invalid date"
var date = 'Saturday 9:00 PM';
var days = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
];

var parts = date.split(/\s/);
var day   = days.indexOf(parts[0]);
var hours = Number(parts[1].match(/^(\d+)/)[1]);
var mins  = Number(parts[1].match(/:(\d+)/)[1]);
var AMPM  = parts[2];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;

var d    = new Date();
var dday = d.getDay();

d.setDate(d.getDate() + (day - dday));
d.setHours(hours);
d.setMinutes(mins);

小提琴

下面將解析OP日期字符串格式,它將周日用作一周的第一天。 如果時間為“ 09:32:23”,則字符串可以包含秒,例如“ Mon”或“ Mo”之類的日期而不是全名,並且不區分大小寫('mo'=='Mo'=='MO'等等。)。 它還可以使用match而不是split來處理“星期一,09:00 AM”中的逗號。

// Turn a string like "Saturday 9:00 PM" into a date
// Assumes day in current week, Sunday is first day of week
var parseString = (function() {

    // constants
    var reAP  = /am$/i;
    var days  = {su:0,mo:1,tu:2,we:3,th:4,fr:5,sa:6};
    var reS = /[ :]+/;
    var reNum = /^[0-9]+$/;

    return function(s) {
      var b = s.split(reS);
      var now = new Date();
      var nowDay = now.getDay();
      var tgtDay = days[s.substr(0,2).toLowerCase()];
      now.setDate(now.getDate() - nowDay + tgtDay);
      now.setHours( (reAP.test(s)? 0 : 12) + +b[1], b[2], (reNum.test(b[3])? b[3]:0 ));
      return now; 
    }
}());

您可以通過使用moment().week()獲取星期數,並將其添加到您已經擁有的字符串中(因為說星期六本身是模棱兩可的)來實現此目的,正如@Rocket Hazmat所說的那樣,請使用moment.js的解析格式 請注意,以下解決方案為您提供了本周的星期六( 周六可能不會)。

time_string = "Saturday 9:00 PM";
week_number = moment().week();                 // 19
time_string = time_string + ' ' + week_number; // now you have "Saturday 9:00 PM 19"
time = moment(time_string, "dddd h A w");      // guides parsing to read a day, hour, 
                                               //      am/pm and week number

現在我們進入了2014年的第19周,這將timeSat May 10 2014 21:00:00 GMT -0000 :0: Sat May 10 2014 21:00:00 GMT -0000

對於上周六(可能與上周六可能不同 ),以下進行了減去減法后的結果: Sat May 03 2014 21:00:00 GMT -0000

time_string = "Saturday 9:00 PM";
week_number = moment().week();                 // 19
week_number = week_number - 1;                 // 18 = 19 - 1
time_string = time_string + ' ' + week_number; // now you have "Saturday 9:00 PM 18"
time = moment(time_string, "dddd h A w");      // guides parsing to read a day, hour, 
                                               //     am/pm and week number

請注意,如果您未指定星期數,則默認為1 ,並為您提供一月的日期。

如果您最關心的是自然語言解析,則可以考慮專門針對此問題的庫,例如Sugar

var dt = Date.create('Saturday 9:00 AM');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM